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)
您的查询有什么问题:
正确的查询:
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)