Axa*_*dax 60 .net c# linq sum linq-to-sql
假设我有一个名为Items的表(ID int,Done int,Total int)
我可以通过两个查询来完成:
int total = m.Items.Sum(p=>p.Total)
int done = m.Items.Sum(p=>p.Done)
Run Code Online (Sandbox Code Playgroud)
但我想在一个查询中执行此操作,如下所示:
var x = from p in m.Items select new { Sum(p.Total), Sum(p.Done)};
Run Code Online (Sandbox Code Playgroud)
当然有一种方法可以从LINQ语法中调用聚合函数......?
Ste*_*ven 86
这样就可以了:
from p in m.Items
group p by 1 into g
select new
{
SumTotal = g.Sum(x => x.Total),
SumDone = g.Sum(x => x.Done)
};
Run Code Online (Sandbox Code Playgroud)
Who*_*nja 10
要对表进行求和,请按常量分组:
from p in m.Items
group p by 1 into g
select new {
SumTotal = g.Sum(x => x.Total),
SumDone = g.Sum(x => x.Done)
}
Run Code Online (Sandbox Code Playgroud)
怎么样
m.Items.Select(item => new { Total = item.Total, Done = item.Done })
.Aggregate((t1, t2) => new { Total = t1.Total + t2.Total, Done = t1.Done + t2.Done });
Run Code Online (Sandbox Code Playgroud)
小智 6
弄清楚在我的其余代码中提取总和或其他聚合的位置使我感到困惑,直到我记得我构造的变量是一个Iqueryable.假设我们的数据库中有一个由Orders组成的表,我们想为ABC公司生成一个摘要:
var myResult = from g in dbcontext.Ordertable
group p by (p.CUSTNAME == "ABC") into q // i.e., all of ABC company at once
select new
{
tempPrice = q.Sum( x => (x.PRICE ?? 0m) ), // (?? makes sure we don't get back a nullable)
tempQty = q.Sum( x => (x.QTY ?? 0m) )
};
Run Code Online (Sandbox Code Playgroud)
现在有趣的部分 - tempPrice和tempQty没有在任何地方声明,但它们必须是myResult的一部分,不是吗?访问它们如下:
Console.Writeline(string.Format("You ordered {0} for a total price of {1:C}",
myResult.Single().tempQty,
myResult.Single().tempPrice ));
Run Code Online (Sandbox Code Playgroud)
还可以使用许多其他可查询方法.
| 归档时间: |
|
| 查看次数: |
59898 次 |
| 最近记录: |