linq语句求教

IssacChow 2018-09-06 05:43:02
现在有表A、B、C。A为主表(ID、NAME、AA),B为关联表(ID、AID、CID、TIME),C为操作表(ID、CC)。
业务:
取B表最新一条数据作为关联数据,去关联A、C表。
即:A数据100条,B数据500条,C数据500条。
查询结果:100条,包合A、B、C三张表的数据。
...全文
386 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
IssacChow 2018-09-07
  • 打赏
  • 举报
回复

var query = from a in A
join t in B.Take(1) on a.id equals t.aid
join c in C on t.cid equals c.id
select new { a, t, c };

貌似这样就可以了,谢谢大神!
threenewbee 2018-09-06
  • 打赏
  • 举报
回复
引用 5 楼 a271083650 的回复:
[quote=引用 4 楼 caozhy 的回复:]
var T = B.OrderByDescending(x => x.Date).Select((x, i) => new { x.id, x.aid, x.cid, rn = i });
var query = from a in A
join t in T.Select(x => x.x).Take(1) on a.id equals t.aid
join c in C on t.cid equals c.id
select new { a, t, c };
ID都不会是数字,我写着有点问题。在修改中。[/quote]
是不是数字没有关系
IssacChow 2018-09-06
  • 打赏
  • 举报
回复
var T = B.OrderByDescending(x => x.Date).Select((x, i) => new { x.id, x.aid, x.cid, rn = i });
var query = from a in A
join t in T.Select(x => x.rn).Take(1) on a.id equals t.aid
join c in C on t.cid equals c.id
select new { a, t, c };
IssacChow 2018-09-06
  • 打赏
  • 举报
回复
引用 6 楼 caozhy 的回复:
[quote=引用 5 楼 a271083650 的回复:]
[quote=引用 4 楼 caozhy 的回复:]
var T = B.OrderByDescending(x => x.Date).Select((x, i) => new { x.id, x.aid, x.cid, rn = i });
var query = from a in A
join t in T.Select(x => x.x).Take(1) on a.id equals t.aid
join c in C on t.cid equals c.id
select new { a, t, c };
ID都不会是数字,我写着有点问题。在修改中。[/quote]
是不是数字没有关系[/quote]
报错:INT 不包含 AID的定义,并且找不到可接受类型为 INT 的第一个参数的扩展方法 AID
IssacChow 2018-09-06
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
var T = B.OrderByDescending(x => x.Date).Select((x, i) => new { x.id, x.aid, x.cid, rn = i });
var query = from a in A
join t in T.Select(x => x.x).Take(1) on a.id equals t.aid
join c in C on t.cid equals c.id
select new { a, t, c };
ID都不会是数字,我写着有点问题。在修改中。
threenewbee 2018-09-06
  • 打赏
  • 举报
回复
var T = B.OrderByDescending(x => x.Date).Select((x, i) => new { x.id, x.aid, x.cid, rn = i });
var query = from a in A
join t in T.Select(x => x.x).Take(1) on a.id equals t.aid
join c in C on t.cid equals c.id
select new { a, t, c };
IssacChow 2018-09-06
  • 打赏
  • 举报
回复

--相当于如下SQL脚本
selct A.*,T.*,C.* from A a1 inner join (
select * from (
select ID,AID,CID,row_number() over(partition by ID order by DATE desc) rn
from B
) t where t.rn <=1) b1 on a1.ID=b1.AID
INNER JOIN C c1 ON b1.CID=c1.ID

IssacChow 2018-09-06
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
A数据100条,B数据500条,C数据500条。一共1100条,你倒是告诉我为什么查询结果:100条
关联,为啥会有1100条数据?
threenewbee 2018-09-06
  • 打赏
  • 举报
回复
A数据100条,B数据500条,C数据500条。一共1100条,你倒是告诉我为什么查询结果:100条

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧