实体框架 LINQ - 具有分组依据的子查询
Posted
技术标签:
【中文标题】实体框架 LINQ - 具有分组依据的子查询【英文标题】:Entity Framework LINQ - Subquery with Group By 【发布时间】:2010-07-26 08:30:09 【问题描述】:我正在尝试实现一个包含子查询的查询,该子查询本身包含分组。
我的代码基于此question的答案
代码的目的是根据电子邮件地址对“人员”表执行简单的重复数据删除,并返回最新的人员行。
var innerQuery = (from p in db.Person
join r in db.Registration on p equals r.Person
join e in db.EventDetail on r.EventDetail equals e
where e.Client.ClientID == clientID
group p by p.Email into g
select g.Max(p => p.PersonID));
var query = (from p2 in db.Person where innerQuery.Contains(p2.PersonID) select p2);
尝试执行查询时,我收到以下错误消息:
LINQ to Entities 无法识别 方法'布尔 包含[Int32](System.Linq.IQueryable`1[System.Int32], Int32)' 方法,而该方法不能 被翻译成商店表达式。
我已经测试了内部查询,它只是按预期返回一个整数列表,但查询失败并显示上述消息。
非常感谢任何帮助。
【问题讨论】:
【参考方案1】:query
不只是加入吗?
var query = from p2 in db.Person
join iq in innerQuery on p2.PersonID equals iq
select p2;
我不确定= iq
部分,但我通常不使用该语法抱歉 - 以其他形式
.Join(innerQuery, p2 => p2.PersonId, iq => iq, (p2, iq) => p2);
用于连接和选择。
【讨论】:
如果调整为:from p2 in db.Person join iq in innerQuery on p2.PersonID equals iq select p2 谢谢。以上是关于实体框架 LINQ - 具有分组依据的子查询的主要内容,如果未能解决你的问题,请参考以下文章
在实体框架和 Linq to Entities 中使用规范模式和表达式