如何对标题进行分组并在select语句中添加where条件

时间:2014-08-21 20:17:04

标签: c# linq

请参考下面的数据表图像

enter image description here

标题包含两组值

  1. 难以使用/理解
  2. 交付问题
  3. 我想对标题进行分组并获取类别百分比,如下面的代码

     var p = from linq_row in trend_data.AsEnumerable()
                        group linq_row by linq_row["Header"] into g
                        select new
                        {
    
                            categorypercentage = g.Select(s => s["categoryPercentage"].ToString()).ToArray()
                        };
    

    以上linq将对标题进行分组并返回标题

    的categorypercentage

    但我想要的是我需要两组变量而不是一个单一变量

    var p= from.....
          select new
           {
           firstgroupedheadercategorypercentage= g.select ....and some where clasue
           secondgroupedheadercategorypercentage= g.select ....and some where clasue
    }
    

    如何在select新语句内部执行或执行插入where子句的操作。

    我需要根据标题值获取类别百分比。

1 个答案:

答案 0 :(得分:2)

如果您想要每组的百分比列的总和:

var headerPercentages = trend_data.AsEnumerable()
    .GroupBy(r => r.Field<string>("Header"))
    .Select(g => new { Header = g.Key, Percentage = g.Sum(r => r.Field<double>("categoryPercentage"))});

如果您希望单个匿名类型实例作为结果,并且具有这些特定标头的两个属性:

var x = new {
    firstHeaderPercentage = trend_data.AsEnumerable()
        .Where(r => r.Field<string>("Header") == "Difficult to use/Understand")
        .Sum(r => r.Field<double>("categoryPercentage")),
    secondHeaderPercentage = trend_data.AsEnumerable()
        .Where(r => r.Field<string>("Header") == "Delivery Issues")
        .Sum(r => r.Field<double>("categoryPercentage"))
};