给定一个简单的模式,例如PurchaseOrders { OrderId,Total,LineItemCount },我想为一些简单的统计数据生成一个简单的查询,如下所示:
select sum(lineitemcount) as totalitems, sum(total) as totalsales
from purchaseorders然而,在Linq to Sql中,我很难将其整合到一个查询中。
目前我有这样的想法:
decimal totalSales = PurchaseOrders.Sum(po => po.Total)
decimal totalItems = PurchaseOrders.Sum(po => po.LineItemcount)有没有一种方法可以作为一个查询来完成?
发布于 2009-12-10 21:47:38
我能找到的最接近的方法就是给它一个假的group-by子句。它可以工作,输出如你所料,但生成的SQL实际上传递了一个参数"1“,并对它进行了分组,这有点不理想。下面是我得到的语法:
PurchaseOrders
.GroupBy(po => 1)
.Select(pogroup => new {
TotalSales = pogroup.Sum(po => po.Total),
TotalItems = pogroup.Sum(po => po.LineItemCount)
});发布于 2009-12-10 20:37:16
这里有一种方法应该是可行的。我不确定数据类型,所以我假设是可以为空的整数。
from t in (
from t in PurchaseOrders
select new {
t.LineItemCount,
t.Total,
Dummy = "x"
}
)
group t by new { t.Dummy } into g
select new {
TotalItems = (System.Int32?)g.Sum(p => p.LineItemCount),
TotalSales = (System.Int32?)g.Sum(p => p.Total)
}发布于 2009-12-10 20:38:12
也许你可以尝试聚合:
var totOrder= PurchaseOrders.Aggregate((preOrder, thisOrder)=>SumTwoOrder(preOrder, thisOrder));
var totalSales = totOrder.Total;
var totalItems=totOrder.LineItemCount;下面是定义SumTwoOrder方法的方式:
public PurchaseOrder SumTwoOrder(PurchaseOrder prev, PurchaseOrder thisOrder)
{
return new PurchaseORder(prev.Total+thisOrder.Total, prev.LineItemCount+thisOrder.LineItemCount);
}https://stackoverflow.com/questions/1880634
复制相似问题