EF Core LINQ 查询因限制而失败?
EF Core LINQ query failing due to limitation?
我正在尝试使用 EF Core 3.0 进行非常简单的分组和求和
但是我收到一个奇怪的错误:
System.InvalidOperationException: 'Processing of the LINQ expression
'AsQueryable((Unhandled parameter:
y).TransactionLines)' by 'NavigationExpandingExpressionVisitor'
failed. This may indicate either a bug or a limitation in EF Core.
var creditBalances = await context.Transaction
.Include(x => x.TransactionLines)
.Include(x=>x.CreditAccount)
.Where(x => x.CreditAccount.UserAccount.Id == userAccount.Id)
.GroupBy(x => new
{
x.CreditAccount.ExternalId
})
.Select(x => new
{
x.Key.ExternalId,
amount = x.Sum(y => y.TransactionLines.Sum(z => z.Amount))
})
.ToListAsync();
我正在努力寻找可能出现问题的地方,所以甚至不确定从哪里开始。我正在尝试获取所有交易金额的总和(这是每笔交易的所有 TransactionLines 的总和 - 即交易金额由与其关联的行组成)。
然后我总结所有交易,然后按 CreditAccount ID 分组。
这条线,Unhandled parameter: y
令人担忧。可能我的分组求和不行了
所以从 TransactionLines
级别开始,这很简单:
var q = from c in context.TransactionLines
where c.Transaction.CreditAccount.UserAccount.Id == userAccount.Id
group c by c.Transaction.CreditAccount.ExternalId into g
select new
{
ExternalId = g.Key,
Amount = g.Sum(x => x.Amount)
};
var creditBalances = await q.ToListAsync();
(您不需要任何 Include()
,因为您不会返回具有相关数据的实体。您正在投影自定义数据形状。)
转换为:
SELECT [c].[ExternalId], SUM([t].[Amount]) AS [Amount]
FROM [TransactionLines] AS [t]
LEFT JOIN [Transaction] AS [t0] ON [t].[TransactionId] = [t0].[Id]
LEFT JOIN [CreditAccounts] AS [c] ON [t0].[CreditAccountId] = [c].[Id]
LEFT JOIN [UserAccount] AS [u] ON [c].[UserAccountId] = [u].[Id]
WHERE [u].[Id] = @__userAccount_Id_0
GROUP BY [c].[ExternalId]
我正在尝试使用 EF Core 3.0 进行非常简单的分组和求和
但是我收到一个奇怪的错误:
System.InvalidOperationException: 'Processing of the LINQ expression 'AsQueryable((Unhandled parameter: y).TransactionLines)' by 'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core.
var creditBalances = await context.Transaction
.Include(x => x.TransactionLines)
.Include(x=>x.CreditAccount)
.Where(x => x.CreditAccount.UserAccount.Id == userAccount.Id)
.GroupBy(x => new
{
x.CreditAccount.ExternalId
})
.Select(x => new
{
x.Key.ExternalId,
amount = x.Sum(y => y.TransactionLines.Sum(z => z.Amount))
})
.ToListAsync();
我正在努力寻找可能出现问题的地方,所以甚至不确定从哪里开始。我正在尝试获取所有交易金额的总和(这是每笔交易的所有 TransactionLines 的总和 - 即交易金额由与其关联的行组成)。
然后我总结所有交易,然后按 CreditAccount ID 分组。
这条线,Unhandled parameter: y
令人担忧。可能我的分组求和不行了
所以从 TransactionLines
级别开始,这很简单:
var q = from c in context.TransactionLines
where c.Transaction.CreditAccount.UserAccount.Id == userAccount.Id
group c by c.Transaction.CreditAccount.ExternalId into g
select new
{
ExternalId = g.Key,
Amount = g.Sum(x => x.Amount)
};
var creditBalances = await q.ToListAsync();
(您不需要任何 Include()
,因为您不会返回具有相关数据的实体。您正在投影自定义数据形状。)
转换为:
SELECT [c].[ExternalId], SUM([t].[Amount]) AS [Amount]
FROM [TransactionLines] AS [t]
LEFT JOIN [Transaction] AS [t0] ON [t].[TransactionId] = [t0].[Id]
LEFT JOIN [CreditAccounts] AS [c] ON [t0].[CreditAccountId] = [c].[Id]
LEFT JOIN [UserAccount] AS [u] ON [c].[UserAccountId] = [u].[Id]
WHERE [u].[Id] = @__userAccount_Id_0
GROUP BY [c].[ExternalId]