Bry*_*ger 8 c# entity-framework-core .net-core
Ef Core接收错误
System.InvalidOperationException:客户端评估后无法处理设置操作,请考虑在 Microsoft.EntityFrameworkCore.Query.SqlExpressions.SelectExpression.ApplySetOperation(SetOperationType setOperationType, SelectExpression select2,布尔值不同)
执行时
public async Task<object> GetUnitsForDataTableAsync() =>
await context.Units
.Where(x => !x.TractUnitJunctions.Any())
.Select(x => new
{
x.Id,
x.UnitName,
x.UnitAcres,
TractNum = String.Empty,
Wells = String.Empty,
NumOfWells = 0,
})
.Union(
context.TractUnitJunctions
.Select(x => new
{
Id = x.UnitId,
x.Unit.UnitName,
x.Unit.UnitAcres,
x.Tract.TractNum,
Wells = string.Join(", ", x.TractUnitJunctionWellJunctions
.Select(z => $"{z.Well.WellNum} ({z.Well.ApiNum})")
),
NumOfWells = x.TractUnitJunctionWellJunctions.Count()
}))
.ToListAsync().ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其分成两个查询,该函数就可以正常工作。
public async Task<object> GetUnitsForDataTableAsync()
{
var List1 = await context.Units
.Where(x => !x.TractUnitJunctions.Any())
.Select(x => new
{
x.Id,
x.UnitName,
x.UnitAcres,
TractNum = String.Empty,
Wells = String.Empty,
NumOfWells = 0,
})
.ToListAsync().ConfigureAwait(false);
var List2 = await context.TractUnitJunctions
.Select(x => new
{
Id = x.UnitId,
x.Unit.UnitName,
x.Unit.UnitAcres,
x.Tract.TractNum,
Wells = string.Join(", ", x.TractUnitJunctionWellJunctions
.Select(z => $"{z.Well.WellNum} ({z.Well.ApiNum})")
),
NumOfWells = x.TractUnitJunctionWellJunctions.Count()
})
.ToListAsync().ConfigureAwait(false);
return List1.Concat(List2);
}
Run Code Online (Sandbox Code Playgroud)
我已经对该错误进行了一些研究,但我不确定如何重构第一个查询来解决该错误
接受的答案虽然有效,但存在缺陷,因为您急于加载第一个列表。
这是一个已知的错误,您应该能够通过将Where子句移到Union之后来解决该错误
正如此处讨论的https://github.com/dotnet/efcore/issues/16243#issuecomment-622452276
| 归档时间: |
|
| 查看次数: |
12348 次 |
| 最近记录: |