首页 新闻 会员 周边

EF linq lambda

0
悬赏园豆:10 [已解决问题] 解决于 2018-06-01 11:57

表:Person(Id,Name),Project(Id,PersonId,Name)
关系一对多:Person.Id 对 Project.PersonId
我要查Person关联子表Project(Project表只取Id最大的一行)
用lambda表达式树怎么写?

我下面这个伪代码明显是有问题的,没有取Id最大的一个project,映射到PersonDto时会报错

var result = Person.Join(Project, ps => ps.Id, pj => pj.PersonId, (ps, pj) => new PersonDto
{
  Id=ps.Id,
  PersonName=ps.Name,
  ProjectName=pj.Name
})
.ToList();
找不到一个满意的昵称的主页 找不到一个满意的昵称 | 菜鸟二级 | 园豆:243
提问于:2018-06-01 09:51
< >
分享
最佳答案
0

“大神”脾气就是大,惹不起惹不起。

解决:

Person.GroupJoin(Project.OrderByDescending(p=> p.Id)
, ps => ps.Id
, pj => pj.PersonId
, (ps, pj) => new PersonDto
{
  Id=ps.Id,
  PersonName=ps.FirstOrDefault().Name,
  ProjectName=pj.FirstOrDefault().Name
})
//Include Join都可以实现,只是被Last/LastOrDefault误导了(不能转换成SQL语句导致的错误),转而用orderby+first
找不到一个满意的昵称 | 菜鸟二级 |园豆:243 | 2018-06-01 11:55
其他回答(1)
0
var result = Person.Join(Project.where(c=>c.Id==Project.Max(m=>m.Id)), ps => ps.Id, pj => pj.PersonId, (ps, pj) => new PersonDto
{
  Id=ps.Id,
  PersonName=ps.Name,
  ProjectName=pj.Name
})
.ToList();

加一个条件先筛选最大的不就好了吗???

收获园豆:10
华临天下 | 园豆:1501 (小虾三级) | 2018-06-01 10:11

你确定?都没分组, join的这个Project只有一条数据?

@以后会觉得昵称很幼稚: 除非你的最大Id有多条记录,但是感觉你这个应该是自增长的。。。行不行的话试试不就知道了啊?

支持(0) 反对(0) 华临天下 | 园豆:1501 (小虾三级) | 2018-06-01 10:24

不行,这样只查出1条Person数据

@以后会觉得昵称很幼稚: 最大的Id如果只有一条记录,你说如果personId有几个,对应的Person能有几个?

支持(0) 反对(0) 华临天下 | 园豆:1501 (小虾三级) | 2018-06-01 10:44

@华临天下: 

Person

101 张三

102 李四

Project

1 101 项目a

2 101 项目b

3 102 项目c

要取的结果

PersonDto

101 张三 项目b

102 李四 项目c

join里面应该这样写,我试试Join(Project.GroupBy(p=>p.PersonId)...

@以后会觉得昵称很幼稚: 那你这个跟你的问题去最大有关系吗???

支持(0) 反对(0) 华临天下 | 园豆:1501 (小虾三级) | 2018-06-01 10:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册