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

我目前有以下代码:

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)
                })  

但是((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);

与哪些运算符>>兼容 - java

我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

>> Python中的运算符 - python

>>运算符做什么?例如,以下操作10 >> 1 = 5有什么作用? 参考方案 它是右移运算符,将所有位“右移”一次。二进制10是1010移到右边变成0101这是5

LINQ RemoveAll代替循环 - c#

我有两个for循环,用于从列表中删除项目。我正在为这些循环寻找等效的LINQ语句for (Int32 i = points.Count - 1; i >= 0; i--) { for (Int32 j = touchingRects.Count - 1; j >= 0; j--) { if (touchingRects[j].HitTest(po…

如何知道是否由父母造成了回合(A => B => C => A) - c#

我有以下结构:[Employee] ID Manager1ID Manager2ID 场景:我要进行验证,以确保所选的Manager1或Manager2不会引起回合。换句话说,我想知道这种情况是否存在:A的经理是B,B的经理是C,C的经理也是A //无效A => B => C => A告诉用户A不是C的有效管理员,因为C已经是A的管理员。问…

Linq Any()的哪种使用效率更高? - c#

我有一个Linq查询,如下所示:return this._alarmObjectAlarmViolationList .Where(row => row.ObjectId == subId) .Where(row => row.AlarmInternalId == "WECO #1 (StdDev > UCL)") .W…