LINQ语句问题
有一datatable
Name(姓名) status(状态)
A 正常
A 违规
A 正常
A 违规
A 违规
A 正常
B 正常
B 违规
B 违规
B 违规
B 违规
B 违规
C 正常
C 违规
现要统计得以下结果
Name 总次数 违规次数 正常次数
A 6 3 3
B 6 5 1
C 2 1 1
现在通过linq 我只能分别返回每个人 总的次数,总违规次数 总正常次数 现想向求一条 linq 就可以把这三项数据都返回
[解决办法]
var list = dt.AsEnumerable().GroupBy(t => t.Field<string>("Name")).Select(t => new
{
Name=t.Key,
Sum=t.Count(),
Sum_WeiGui = t.Count(tt => tt.Field<string>("status") == "违规"),
Sum_ZhengChang = t.Count(tt => tt.Field<string>("status") == "正常")
}).ToList();
var stateinfo = from t in table.AsEnumerable()
group t by t.Field<string>("Name") into r
select new
{
name = r.Key.ToString(),
count = r.Count(),
illegal_count = r.Count(x => x.Field<string>("Status") == "违规")
};
Console.WriteLine("Name 总次数 违规次数 正常次数");
foreach (var result in stateinfo.OrderByDescending(g => g.illegal_count))
{
Console.WriteLine("{0,-9} {1,-9} {2,-9} {3,-9}", result.name, result.count,
result.illegal_count, result.count-result.illegal_count);
}