通过具有不同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,你只需要一个具有三个属性UserName
, Billable
, NonBillable
的项目序列。 如果您需要将结果作为DataTable,则需要一些额外的工作。 如果是这样的话,请告诉我。
我们上面做的是,它很简单。 最初,我们根据用户的名称对结果进行分组,然后我们过滤每个组的项目,以便计算相应的总和。