Tech Neo 创造一个纯粹高质的技术交流平台

EF linq lambda的问题?

表: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();
请先 登录 后评论

最佳答案 2018-06-08 15:13

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

解决:

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
请先 登录 后评论

其它 1 个回答

博问用户

<div class="cnblogs_code">
<pre><span style="color: #0000ff">var</span> result = Person.Join(Project.<span style="color: #0000ff">where</span>(c=>c.Id==Project.Max(m=>m.Id)), ps => ps.Id, pj => pj.PersonId, (ps, pj) => <span style="color: #0000ff">new</span><span style="color: #000000"> PersonDto
{
  Id</span>=<span style="color: #000000">ps.Id,
  PersonName</span>=<span style="color: #000000">ps.Name,
  ProjectName</span>=<span style="color: #000000">pj.Name
})
.ToList();</span></pre>
</div>
<p>加一个条件先筛选最大的不就好了吗???</p>

请先 登录 后评论