C# 使用LINQ在datatable中的两列上按第三列的和分组
我正在搜索输入和输出数据表如下所示的LINQ查询-C# 使用LINQ在datatable中的两列上按第三列的和分组,c#,linq,datatable,C#,Linq,Datatable,我正在搜索输入和输出数据表如下所示的LINQ查询- Name Code count ------------------------- User1 q1 2 user1 q2 2 user2 q2 1 user2 q3 3 user1 q1 2 Name Code Count ----------------------- User1 | q1 | 4 User1 | q2 | 2 User1 |
Name Code count
-------------------------
User1 q1 2
user1 q2 2
user2 q2 1
user2 q3 3
user1 q1 2
Name Code Count
-----------------------
User1 | q1 | 4
User1 | q2 | 2
User1 | q3 | 0
User2 | q1 | 0
User2 | q2 | 1
User2 | q3 | 3
i、 e.我想要每个名称的不同代码集的计数之和,在结果表中,它显示(user1,q3,0),因为在输入数据表中没有user1的q3记录,请在这方面提供帮助,再次感谢
var result =
new DataTable().Rows.Cast<DataRow>()
.Select(p => new {User = p[0], Q = p[1], Value = (double) p[2]})
.GroupBy(p => new {p.User, p.Q})
.Select(p => new {User = p.Key.User, Q = p.Key.Q, Total = p.Sum(x => x.Value)})
.ToList();
var结果=
新建DataTable().Rows.Cast()
.Select(p=>new{User=p[0],Q=p[1],Value=(double)p[2]})
.GroupBy(p=>new{p.User,p.Q})
.Select(p=>new{User=p.Key.User,Q=p.Key.Q,Total=p.Sum(x=>x.Value)})
.ToList();
或者差不多,但你也可以做到:
var result =
new DataTable().Rows.Cast<DataRow>()
.Select(p => new
{
User = p.Field<string>("column1Name"),
Q = p.Field<string>("column2Name"),
Value = p.Field<double>("column3Name")
})
.GroupBy(p => new {p.User, p.Q})
.Select(p => new {User = p.Key.User, Q = p.Key.Q, Total = p.Sum(x => x.Value)})
.ToList();
var结果=
新建DataTable().Rows.Cast()
.选择(p=>new
{
User=p.Field(“column1Name”),
Q=p.字段(“第2列名称”),
值=p.字段(“column3Name”)
})
.GroupBy(p=>new{p.User,p.Q})
.Select(p=>new{User=p.Key.User,Q=p.Key.Q,Total=p.Sum(x=>x.Value)})
.ToList();
这应该可以:
var query = table.AsEnumerable()
.GroupBy(row => new { Name = row.Field<string>("Name"), Code = row.Field<string>("Code") });
var table2 = table.Clone(); // empty table with same schema
foreach (var x in query)
{
string name = x.Key.Name;
string code = x.Key.Code;
int count = x.Sum(r => r.Field<int>("Count"));
table2.Rows.Add(x.Key.Name, x.Key.Code, count);
}
但是,我不知道为什么结果表包含这一行:
User1 | q3 | 0
原始表中没有名称代码组合User1+q3。Hi tim,谢谢您的回复,但第一个代码在绑定到时抛出错误-“指定的强制转换无效”table2@user3240893:那么,
Count
列不是int
列,而是(我猜)字符串列。更改为.User1 | q3 | 0;我想显示输入中所有不同代码的计数(可以是0)table@user3240893:请注意,我已编辑了我的第一种方法。我认为这要简单得多。根据您最后的评论,我稍后会查看。Count=codeGroup.Sum(r=>Convert.ToInt64(r[“code”]),我使用了它,现在它显示了结果,但不是根据需要。
User1 | q3 | 0