通过具有不同Where条件的两个字段对数据进行分组和求和

我有一个带有如下样本数据的数据表。

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("UserName")) .Select(gr=> new { UserName = gr.Key, Billable = gr.Where(row=>row.Field("IsBillable")=="Yes") .Sum(row=>row.Field("Hours"), NonBillable = gr.Where(row=>row.Field("IsBillable")=="No") .Sum(row=>row.Field("Hours"), }); 

我假设dt是你的DataTable,你只需要一个具有三个属性UserNameBillableNonBillable的项目序列。 如果您需要将结果作为DataTable,则需要一些额外的工作。 如果是这样的话,请告诉我。

我们上面做的是,它很简单。 最初,我们根据用户的名称对结果进行分组,然后我们过滤每个组的项目,以便计算相应的总和。