gpt4 book ai didi

c# - 组内组 linq

转载 作者:行者123 更新时间:2023-11-30 14:48:16 24 4
gpt4 key购买 nike

我有一个这样的数据表:

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

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

First Field | Second Field |  Third Field
------------+--------------+----------------
5 | XXXX |(8) (2,6,3) (9)
5 | KKKK |(8,3)

第三个字段必须是列表的列表。

我如何使用 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()
});

enter image description here

最佳答案

您的查询有什么问题:

  • 您不需要首先按三个字段进行分组。按 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())
}

关于c# - 组内组 linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42226358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com