用linq多个和一个匿名类型?

Roy*_*mir 3 .net c# linq datatable

我有这个简单的数据表:

 type (string)   |       cnt (int)     
_____________________________________
aaa                         1
aaa                         2
aaa                         10
bbb                         1
bbb                         1
Run Code Online (Sandbox Code Playgroud)

我想生成这样的1个匿名类型:

{
sumAAA= 13 , sumBBB=2  //13=1+2+10....
}
Run Code Online (Sandbox Code Playgroud)

类似的东西:(伪代码)

var obj= dt.AsEnumerable().Select(f=> new { sumAAA =f.sumOfCntOfAaa , sumBBB =f.sumOfCntOfBbb });
Run Code Online (Sandbox Code Playgroud)

任何帮助?

编辑,这会对你有所帮助

   DataTable dt = new DataTable("myTable");
    dt.Columns.Add("cnt", typeof (int));
    dt.Columns.Add("type", typeof (string));
    DataRow row = dt.NewRow();
    row["cnt"] = 1;
    row["type"] = "aaa";
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["cnt"] = 2;
    row["type"] = "aaa";
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["cnt"] = 10;
    row["type"] = "aaa";
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["cnt"] = 1;
    row["type"] = "bbb";
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["cnt"] = 1;
    row["type"] = "bbb";
    dt.Rows.Add(row);
Run Code Online (Sandbox Code Playgroud)

slo*_*oth 7

充满活力:

dynamic result = new ExpandoObject();
dt.AsEnumerable()
  .GroupBy(r => r.Field<String>("type"))
  .ToList()
  .ForEach(g=> ((IDictionary<String, Object>)result)["sum" + g.Key.ToUpper()] = g.Sum(r=>r.Field<Int32>("cnt")));

Console.WriteLine(result.sumAAA);
Console.WriteLine(result.sumBBB);
Run Code Online (Sandbox Code Playgroud)

适用于不同types 的任意数量,不仅仅是aaabbb.

输出:

13
2 2