集团内部集团linq

Cur*_*ous 3 c# linq linq-to-dataset

我有这样的数据表:

我想将此表分组为FIELD A和FIELD B,我的组的第三个字段应该是FIELD C的列表,但必须按ID字段进行分组.

最后,结果应该是这样的:

First Field | Second Field |  Third Field
------------+--------------+----------------
     5      |     XXXX     |(8) (2,6,3) (9)  
     5      |     KKKK     |(8,3)
Run Code Online (Sandbox Code Playgroud)

第三个字段必须是列表列表.

我怎么能用LINQ做到这一点?

到目前为止我试过这个:

        var trytogroup = (from p in datatable.AsEnumerable()
                                group p by new
                                {
                                    ID = p["Id"].ToLong(),
                                    FieldA = p["FieldA"].ToLong(),
                                    FieldB = p["FieldB"].ToString()
                                } into g
                                select new
                                {
                                    FirstField = g.Key.FieldA,
                                    SecondField = g.Key.FieldB,
                                    ThirdField = datatable.AsEnumerable().Where(p => p["FieldA"].ToLong() == g.Key.FieldA && p["FieldB"].ToString() == g.Key.FieldB).Select(p => p["FieldC"].ToLong()).GroupBy(x => x["Id"].ToLong()).Distinct().ToList()
                                });
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Ser*_*kiy 5

您的查询有什么问题:

  • 您不需要在第一个位置按三个字段分组.按ID分组应在FieldA和FieldB所在的组内完成
  • 获取ThirdField时,您不需要再次查询数据表 - 您已经拥有了所有必需的数据.您只需要按ID添加分组

正确的查询:

 from r in datatable.AsEnumerable()
 group r by new {
   FieldA = r.Field<long>("FieldA"),
   FieldB = r.Field<string>("FieldB")
 } into g
 select new
 {
     First = g.Key.FieldA,
     Second = g.Key.FieldB,
     Third = g.GroupBy(r => r.Field<long>("ID"))
              .Select(idGroup => idGroup.Select(i => i.Field<long>("FieldC")).ToList())
 }
Run Code Online (Sandbox Code Playgroud)