读书人

LINQ语句有关问题

发布时间: 2013-09-28 10:01:20 作者: rapoo

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

读书人网 >C#

热点推荐