The LINQ expression #39;Expression#39; could not be translated. Either rewrite the query in a form that can be translated(无法翻译LINQ表达式。以可以翻译的形式重写查询)
问题描述
我看过很多类似的问题,但没有一个能给我一个解决方案,所以我在想是否有人能帮我解决这个问题。我有一个实体层次结构,因为客户端有多个ClientRateDeal,然后我尝试只提取那些具有全部通过某些条件的客户端费率交易列表的客户端。下面是我生成错误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不能被翻译。有人能帮我这个忙吗?
推荐答案
未知原因(与GroupBy
没有相似之处),EF Core 3.x、5.x不支持LINQGroupJoin
运算符。
您必须使用可用备选方案之一-(1)集合导航属性(首选)或(2)相关子查询。
例如
(1)在Client
类中定义
public ICollection<ClientRateDeal> ClientRateDeals { get; set; }
并在查询内使用它
var query = _context.Client
.Where(c => c.Disabled==false)
// vvv
.Where(c => !c.ClientRateDeals.Any(
crd => crd.Disabled == false &&
(crd.DateEnd == null || crd.DateEnd > DateTime.Today)))
.AsNoTracking().ToList();
或(2)
var query = _context.Client
.Where(c => c.Disabled==false)
// vvv
.Where(c => !_context.ClientRateDeal.Any(crd =>
c.Id == crd.ClientId &&
crd.Disabled == false &&
cr.DateEnd == null || cr.DateEnd > DateTime.Today))
.AsNoTracking().ToList();
通常,而不是
db.As.GroupJoin(db.Bs, a => a.Id, b => b.AId, (a, Bs) => new { a, Bs })
使用
db.As.Select(a => new { a, Bs = db.Bs.Where(b => a.Id == b.AId) })
GitHub相关问题(请前往投票以便有机会实施):
Query with GroupBy or GroupJoin throws exception #17068
Query: Support GroupJoin when it is final query operator #19930
尽管第二个并不完全是我们需要的(我们只希望翻译GroupJoin
,因为它是用上面显示的相关子查询语法编写的)。
这篇关于无法翻译LINQ表达式。以可以翻译的形式重写查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:无法翻译LINQ表达式。以可以翻译的形式重写查询


基础教程推荐
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 全局 ASAX - 获取服务器名称 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01