将两步LINQ查询转换为单个LET查询
本文关键字:查询 转换 单个 LET LINQ 两步 | 更新日期: 2023-09-27 18:09:39
我目前有以下代码:
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
的数据中的所有项。
query
返回数据中该项的所有记录。
我需要将其转换为单个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);
var data = /* enumerable containing rows in your table */;
var part = "X";
var query = data.Where(x => data
.Where(d => d.PartName == part)
.Any(d => d.ItemName == x.ItemName));