【发布时间】:2022-01-16 19:56:33
【问题描述】:
我正在尝试使用 SomeModel 的 IEnumerable 请求过滤此类伪结构(field1、field2、field3)实体的数据库集,其中 SomeModel 包含对(field1、field2)(相同的字段子集)
我试过了
var ordersList3 = await _dbContext.MyEntities.
AsNoTracking().
Where(a => request.Contains(new SomeModel() { field1 = a.field1, field2 = a.field2})).
ToListAsync();
但它不起作用
您能否建议通过包含字段子集的模型列表过滤数据库集的正确方法?
【问题讨论】:
-
Where(a => request.Any(b => a.field1 == filterField1, a.field2 == filterField2)) -
它要求我重写语句 System.InvalidOperationException: The LINQ expression 'b => EntityShaperExpression: SomeEntity ValueBufferExpression: ProjectionBindingExpression: EmptyProjectionMember IsNullable: False .field1 == b.field1' 无法翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。见go.microsoft.com/fwlink/?linkid=2101038
-
类似问题here。这不是微不足道的,因为 EF 无法将对象列表转换为 SQL,例如
new SomeModel() { field1 = a.field1, field2 = a.field2}。 -
我建议使用LINQKit 动态创建代表您的测试或组合的
Expression树。我有扩展方法可以为各种本地代码执行此操作,作为单个测试转换为 SQL。 -
您使用的是什么 LINQ:LINQ to Objects / SQL / EF 6.x / EF Core 2.0 / 2.1 / 3.x / 5.x / 6.x?什么数据库提供商?
标签: c# entity-framework linq