gpt4 book ai didi

c# - 通过数据表使用 Linq to GroupBy 和 Case When

转载 作者:太空宇宙 更新时间:2023-11-03 14:42:43 25 4
gpt4 key购买 nike

在此处输入代码我有一个这样的数据表:

LN             Test_Code        Name       Test_Item_Code        Test_Data  
0107001 A010 Yo V0001 1
0107001 A010 Yo V0002 2
0107001 C040 Yo V0002 1
0107001 C040 Yo V0002 2
0107002 C040 JC V0001 3
0107002 C040 JC V0002 4
0107003 C040 kk V0001 5
0107003 C040 kk V0002 6

我需要像这样获取我的数据表:

LN             Test_Code     Name     DueDate(V0001)        DueDate2(V00002)
0107001 A010 Yo 1 2
0107001 C040 Yo 1 2
0107002 C040 JC 3 4
0107003 C040 kk 5 6

如果可以的话,这是我的 SQL 命令。

select LN, Test_Code, Name, 
case when Test_Item_Code = 'V0001' then Test_Data else '' end as DueDate(V0001),
case when Test_Item_Code = 'V0002' then Test_Data else '' end as DueDate2(V0002)
From dt Group by LN, Test_Code, Name

现在这是我的源代码。它仍然是错误的,因为我不知道如何获取字段 Test_Item_Code 和 Test_Data 以区分何时。

DataTable dt = services.getData();
var data = dt.AsEnumerable()
.GroupBy(r1 => new
{LN = r1["LN"],
Test_Code = r1["Test_Code"],
Name = r1["Name"],
Test_Item_Code = r1["Test_Item_Code"],
Test_Data = r1["Test_Data"]
}).Select(g => new
{LN = g.Key.LN,
Test_Code = g.Key.Test_Code,
Name = g.Key.Name,
DueDate = g.Key.Test_Item_Code == "V0001" ? g.Key.Test_Data : "",
DueDate2 = g.Key.Test_Item_Code == "V0002" ? g.Key.Test_Data : ""
});

我从上面的代码中得到了这样的数据:

LN             Test_Code     Name     DueDate(V0001)        DueDate2(V00002)
0107001 A010 Yo 1
0107001 A010 Yo 2
0107001 C040 Yo 1
0107001 C040 Yo 2
0107002 C040 JC 3
0107002 C040 JC 4
0107003 C040 kk 5
0107003 C040 kk 6

如果可能的话,任何人的帮助/建议将不胜感激。我对 linq 很陌生。

解决方案

var data = dt.Select().GroupBy(r1 => r1["LN"])
.SelectMany(r => r.GroupBy(g => g["Test_Code"]).Select(rr =>
new
{
LN = r.Key,
Test_Code = rr.Key,
Name = rr.First()["Name"],
DueDate = rr.OrderBy(r1 => r1["Test_Item_Code"] == "V0001").First()["Test_Data"],
DueDate2 = rr.OrderBy(r1 => r1["Test_Item_Code"] == "V0002").First()["Test_Data"],
}
));

最佳答案

您需要按 NL 分组,然后按 Test_Code 分组,这是一个示例:

var data = dt.Select().GroupBy(r1 => r1["LN"])
.SelectMany(r => r.GroupBy(g => g["Test_Code"]).Select(rr =>
new
{
LN = r.Key,
Test_Code = rr.Key,
Name = rr.First()["Name"],
DueDate = rr.FirstOrDefault(r1 => r1["Test_Item_Code"] == "V0001")["Test_Data"],
DueDate2 = rr.FirstOrDefault(r1 => r1["Test_Item_Code"] == "V0002")["Test_Data"],
}
));

关于c# - 通过数据表使用 Linq to GroupBy 和 Case When,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56051441/

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