繁体   English   中英

LINQ到实体组的子查询

[英]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.

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