我有一个带有如下样本数据的数据表。
UserName IsBillable Hours
-----------------------------
user1 Yes 10
user2 Yes 15
user3 No 20
user1 Yes 25
user1 No 15
user2 Yes 10
我希望按IsBillable
分组并与Hours
列相加。
UserName Billable NonBillable
-----------------------------
user1 35 15
user2 25 0
user3 0 20
如何使用LINQ
?
答案 0 :(得分:4)
您可以尝试这样的事情:
var grouped = dt.AsEnumerable()
.GroupBy(row=> row.Field<string>("UserName"))
.Select(gr=> new
{
UserName = gr.Key,
Billable = gr.Where(row=>row.Field<string>("IsBillable")=="Yes")
.Sum(row=>row.Field<int>("Hours"),
NonBillable = gr.Where(row=>row.Field<string>("IsBillable")=="No")
.Sum(row=>row.Field<int>("Hours"),
});
我假设dt
是您的DataTable,您只需要一系列包含三个属性UserName
,Billable
,NonBillable
的项目。如果您需要将结果作为DataTable,则需要一些额外的工作。如果是这样的话,请告诉我。
我们上面做的是,它很简单。最初,我们根据用户的名称对结果进行分组,然后我们过滤每个组的项目,以便计算相应的总和。