【发布时间】:2017-11-11 11:30:10
【问题描述】:
您好,我有两张桌子,
产品:
ProductID | IssueDate | Amount
1 2017-06-01 1000
2 2017-06-01 1000
3 2017-06-02 500
和信用:
ProductID | Amount
1 500
1 500
2 1000
3 500
如果我从 SQL Server 使用这样的查询:
SELECT p.IssueDate, SUM(p.Amount), SUM(p.Total)
FROM (SELECT p.IssueDate, SUM(p.Amount) AS Amount,
(SELECT TOP 1 SUM(c.Amount) FROM Credit c WHERE p.Id = c.ProductId) AS Total from Product p
GROUP BY p.IssueDate, p.Id) p
GROUP BY p.IssueDate
我得到这个结果:
IssueDate | Amount | Total
2017-06-01 2000 2000
2017-06-02 500 500
在 C# Linq 中,我可以通过如下两个查询来获取这些数据:
var data = from p in Products.Collection
select new
{
Product = p,
Credits = Credit.Collection.Where(c => c.ProductID == p.ID).Sum(c => c.Amount)
};
var result = from d in data
group d by new
{
IssueDate = d.Product.IssueDate
} into gr
select new
{
IssueDate = gr.Key.IssueDate,
Credits = gr.Sum(s => s.Credits),
Total = gr.Sum(s => s.Product.Amount)
};
var test = result.ToList();
有没有人知道更好(更简单)的解决方案来获得这个结果?也许在一个查询中?
【问题讨论】:
-
对我来说简单易读。当前的 LINQ 查询有什么复杂的地方?
-
我考虑了效率,也许在一个查询中会更好。
-
LINQ 生成 SQL。是一个查询还是多个查询?他们看起来怎么样?也许它已经很有效了?也许它经过优化并且比您的 SQL 查询执行得更好。