给出一个简单的模式,例如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)
有没有办法将此作为一个查询?
答案 0 :(得分:2)
最接近我可以解决的问题是给它一个假的group-by子句。它可以工作,并按照您的预期输出,但生成的SQL实际上会在参数“1”中传递并对其进行分组,这有点不是最理想的。这是我所拥有的语法:
PurchaseOrders
.GroupBy(po => 1)
.Select(pogroup => new {
TotalSales = pogroup.Sum(po => po.Total),
TotalItems = pogroup.Sum(po => po.LineItemCount)
});
答案 1 :(得分:1)
这是一种应该有效的方法。我不确定数据类型所以我假设可以为空的整数。
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)
}
答案 2 :(得分:1)
也许你可以尝试聚合:
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);
}