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

时间:2015-08-17 09:43:09

标签: c# linq datatable

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

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

执行此操作

1 个答案:

答案 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,您只需要一系列包含三个属性UserNameBillableNonBillable的项目。如果您需要将结果作为DataTable,则需要一些额外的工作。如果是这样的话,请告诉我。

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