[英]linq to entities group by sub-query
我有以下代码:
var statements = db.statement
.OrderByDescending(d => d.id)
.Take(5)
.AsEnumerable()
.Select(d => new Statements
{
Accounts = d.statement_entry.AsEnumerable()
.GroupBy(b => b.currency)
.Select(b =>
new Account
{
In = b.Where(l => l.amount > 0).Sum(l => l.amount),
Out = b.Where(l => l.amount < 0).Sum(l => l.amount),
Balance = b.Sum(l => l.amount),
Currency = b.Key
}).OrderBy(b => b.Currency),
UploadedDate = d.uploaded_date,
Id = d.id
})
.ToList();
没有AsEnumerable()
,有没有办法做到这一点? 据我了解, AsEnumberable
将导致对返回的每个statement
进行查询。
还是有更好的方法来重构代码?
你看错了 AsEnumerable
将使查询在本地(客户端)计算机上执行。
这个
statements = db.statement
.OrderByDescending(d => d.id)
.Take(5)
将在(SQL)服务器上执行,
客户的其余部分
你为什么把AsEnumerable
? 我认为即使没有查询,查询也应该工作(它将完成服务器端的所有工作)
唯一的事情是,在OrderBy(b => b.Currency)
您应该放置一个.ToList()
以便.Select(b => new Account
得以实现和缓存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.