首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

LINQ语句有关问题

2013-09-28 
LINQ语句问题有一datatableName(姓名)status(状态) A正常 A违规 A正常 A违规 A违规 A正常 B正常 B违规 B违

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

热点排行