Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按具有不同Where条件的两个字段对数据表进行分组和求和_C#_Linq_Datatable - Fatal编程技术网

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

C# 按具有不同Where条件的两个字段对数据表进行分组和求和,c#,linq,datatable,C#,Linq,Datatable,我有一个datatable,其中包含如下示例数据 UserName IsBillable Hours ----------------------------- user1 Yes 10 user2 Yes 15 user3 No 20 user1 Yes 25 user1 No 15 user2 Yes

我有一个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

您可以尝试以下方法:

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"),
                });
var group=dt.AsEnumerable()
.GroupBy(行=>row.Field(“用户名”))
.选择(gr=>new
{
用户名=组密钥,
Billable=gr.Where(行=>行字段(“IsBillable”)==“是”)
.Sum(行=>行字段(“小时”),
非计费=gr.Where(行=>行字段(“IsBillable”)==“否”)
.Sum(行=>行字段(“小时”),
});
我假设
dt
是您的数据表,您只需要一系列具有三个属性的项
UserName
可计费的
不可计费的
。如果您需要将结果作为数据表,您需要做一些额外的工作。如果是这样,请告诉我


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

谢谢您的回复。您的回答解决了我的问题@Christos@YusufDuyar不客气,伙计!我很高兴我帮了忙:)