如何将嵌套的不存在查询转换为LINQ

如何将嵌套的不存在查询转换为LINQ,linq,tsql,Linq,Tsql,知道如何将其转换为linq吗 SELECT DISTINCT PartNumber AS [PartNumber That Includes EVERY ItemNumber Listed in @RequiredItemsTable] FROM Part.BillsOfMaterialsFlattened AS bom1 WHERE NOT EXISTS (SELECT * FROM @RequiredItemsTable w WH

知道如何将其转换为linq吗

SELECT DISTINCT PartNumber AS [PartNumber That Includes EVERY ItemNumber Listed in @RequiredItemsTable]
  FROM Part.BillsOfMaterialsFlattened AS bom1 
  WHERE NOT EXISTS
       (SELECT *
          FROM @RequiredItemsTable w
         WHERE NOT EXISTS
               (SELECT *
                  FROM Part.BillsOfMaterialsFlattened AS bom2
                 WHERE (bom1.PartNumber = bom2.PartNumber)
                   AND (bom2.ItemNumber = w.ItemNumber)));
我在这个网站上看到了几个例子,试图模仿它们……但到目前为止还没有达到目的

谢谢

下面是一个表格示例,说明我希望通过linq实现的目标。前面的T-SQL实现了这一点

Part.BillsOfMaterialsFlattened
PartNumber  ItemNumber
10041047    10034480
10041047    10041090
10041047    10041091
10041048    10034480
10041048    10041091
10041049    10034650
10041049    10041090
10041049    10041091
10041050    10034650
10041050    10041091
10041061    10001331
10041061    10001422

@RequiredItemsTable
ItemNumber
10041090
10041091
希望LINQ语句生成
IQueryable


以下linq实现了这一点:

var requiredItems = criteria.BomItemsIncluded.AsQueryable();
var partNumbers = (from b in _db.BillsOfMaterialsFlatteneds
                    group b by b.PartNumber into g
                    where requiredItems.All(r => g.Select(_ => _.ItemNumber).Contains(r))
                    select g.Key).Distinct();

尝试跟随这篇文章:我尝试跟随这篇文章中概述的技术:使用这段代码…我有太多的行被注释掉了,我不确定哪一组完全模仿了这项技术。我还看了这篇文章:我对它将代码重组为可搜索谓词的技术感兴趣。我以前从未听说过“sargable”这个词(我有机械工程背景)。我想要一个非常高效的linq查询。这个网站上的限制对我来说似乎很奇怪。上帝禁止你在写评论时站起来泄密。说真的,最多5分钟来编辑你的评论。最后,我试着跟随乔·塞尔科的分工,在这里发布了余数技巧:
var requiredItems = criteria.BomItemsIncluded.AsQueryable();
var partNumbers = (from b in _db.BillsOfMaterialsFlatteneds
                    group b by b.PartNumber into g
                    where requiredItems.All(r => g.Select(_ => _.ItemNumber).Contains(r))
                    select g.Key).Distinct();