C# 按具有不同Where条件的两个字段对数据表进行分组和求和
我有一个datatable,其中包含如下示例数据C# 按具有不同Where条件的两个字段对数据表进行分组和求和,c#,linq,datatable,C#,Linq,Datatable,我有一个datatable,其中包含如下示例数据 UserName IsBillable Hours ----------------------------- user1 Yes 10 user2 Yes 15 user3 No 20 user1 Yes 25 user1 No 15 user2 Yes
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
?您可以尝试以下方法:
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"),
});
var group=dt.AsEnumerable()
.GroupBy(行=>row.Field(“用户名”))
.选择(gr=>new
{
用户名=组密钥,
Billable=gr.Where(行=>行字段(“IsBillable”)==“是”)
.Sum(行=>行字段(“小时”),
非计费=gr.Where(行=>行字段(“IsBillable”)==“否”)
.Sum(行=>行字段(“小时”),
});
我假设dt
是您的数据表,您只需要一系列具有三个属性的项UserName
,可计费的
,不可计费的
。如果您需要将结果作为数据表,您需要做一些额外的工作。如果是这样,请告诉我
我们在上面所做的很简单。首先,我们根据用户名对结果进行分组,然后过滤每组的项目,以计算相应的总数。谢谢您的回复。您的回答解决了我的问题@Christos@YusufDuyar不客气,伙计!我很高兴我帮了忙:)