gpt4 book ai didi

c# - 将两步 LINQ 查询转换为单个 LET 查询?

转载 作者:行者123 更新时间:2023-12-02 01:59:03 25 4
gpt4 key购买 nike

我目前有以下代码:

var data = /* enumerable containing rows in your table */;
var part = "X";
var items = new HashSet<int>(data
.Where(x => x.PartName == part)
.Select(x => x.ItemName));
var query = data.Where(x => items.Contains(x.ItemName));

items 查找数据中具有特定 PartName 的所有项目。

查询返回该项目的数据中的所有记录。

我需要将其转换为单个 LET 语句(或其他语句),我可以将其嵌入到另一个更大的 LINQ 查询中使用。

例如,如果我的数据如下(记录):

ItemName PartName
1 A
1 B
2 A
3 C

我正在寻找带有“A”部分的项目,我需要最终结果是:

1        A
1 B
2 A

一个建议是做这样的事情:

let a = data.GroupBy(x => x.ItemName)
.Where(g => g.Any(x => x.Partname == part))
.Select(g => new
{
ItemName = g.Key,
PartNames = g.Select(x => x.PartName)
})

但是 (let a) 中返回的数据与预期结果不匹配,这会返回类似以下内容的内容:

1        A,B    // list of parts for that item
2 A

我需要保留如上所示的相同的预先存在的结构。

任何帮助将不胜感激。

最佳答案

听起来您需要从组中选择SelectMany:

   data.GroupBy(x => x.ItemName)
.Where(g => g.Any(x => x.PartName == part))
.SelectMany(g => g);

关于c# - 将两步 LINQ 查询转换为单个 LET 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16074220/

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