按具有不同 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
是您的数据表,您只需要具有三个属性 UserName
、Billable
、NonBillable
的项目序列。如果你需要你的结果是一个数据表,你需要一些额外的工作。如果是这样,请告诉我。
我们上面所做的,很简单。最初我们根据用户名对结果进行分组,然后过滤每组的项目,以计算相应的总和。
我有一个数据表,其中包含如下示例数据。
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
是您的数据表,您只需要具有三个属性 UserName
、Billable
、NonBillable
的项目序列。如果你需要你的结果是一个数据表,你需要一些额外的工作。如果是这样,请告诉我。
我们上面所做的,很简单。最初我们根据用户名对结果进行分组,然后过滤每组的项目,以计算相应的总和。