【发布时间】:2021-10-13 04:30:33
【问题描述】:
我看过很多类似的问题,但没有一个能给我解决方案,所以我在想是否有人可以帮助我解决这个问题。我有一个实体层次结构,因为客户有多个 ClientRateDeals,然后我试图只获取那些具有所有通过某些条件的客户费率交易列表的客户。这是我的生成错误的 LINQ 查询:
var query = _context.Client.Where(c=>c.Disabled==false)
.GroupJoin(_context.ClientRateDeal.Where(crd=>crd.Disabled==false),
c => c.Id,
crd => crd.ClientId,
(c, crd) => new
{
c,
crd = crd.Where(cr => cr.DateEnd == null || cr.DateEnd > DateTime.Today)
})
.Where(res => res.crd.Count() == 0)
.Select(cl => cl.c).AsNoTracking().ToList();
正如您在结果选择器参数中看到的那样,我保留了该条件,然后在结果选择器上保留了 where 子句,以仅获取那些其客户费率交易计数为 0 的人。但是由于某种原因,我得到了以下异常LINQ 无法翻译。谁能帮我解决这个问题?
【问题讨论】:
-
使用导航属性
Client.ClientRateDeals,而不是GroupJoin。如果您使用的是 EF 核心 5,则过滤Include。 -
@GertArnold 我正在使用 EFCore 5,但为什么会出现该错误?我可以不使用 GroupJoin 来获得所需的结果吗?
-
EF 核心对分组(GroupBy 和 GroupJoin)的支持非常有限。
-
@GertArnold 但是如果我不使用 groupjoin 或任何其他加入,我该如何实现这个条件,如果该客户端中的所有 clientratedeals 都通过了某些条件,我只需要选择一个客户端?你能帮我吗?
-
@Gert 所说的是您应该拥有并使用 collection navigation property 而不是手动连接。没有这样的理由吗?
标签: c# linq .net-core entity-framework-core linq-to-sql