繁体   English   中英

EF Core LINQ 查询由于限制而失败?

[英]EF Core LINQ query failing due to limitation?

我正在尝试使用 EF Core 3.0 进行相当简单的分组和汇总

但是我收到一个奇怪的错误:

System.InvalidOperationException:“NavigationExpandingExpressionVisitor”处理 LINQ 表达式“AsQueryable((未处理的参数:y).TransactionLines)”失败。 这可能表示 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM