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

Grouping and Sum Datatable by two fields with different Where conditions

我有一个数据表,其中包含如下示例数据。

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"),
                });

我假定 dt 是您的数据表,您只需要具有三个属性 UserNameBillableNonBillable 的项目序列。如果你需要你的结果是一个数据表,你需要一些额外的工作。如果是这样,请告诉我。

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