C# 将内存中的集合与数据库中的集合相匹配的方法

C# 将内存中的集合与数据库中的集合相匹配的方法,c#,linq,set,C#,Linq,Set,我正在尝试查找数据库中所有具有完全相同的子记录集的记录,如所提供的。听起来不太清楚,但请稍等,我会解释的 有一个带有条形码和文档字段的表格条形码: Barcode | Document ________|_________ A | ABC A | CDE A | EFG B | XYZ B | VWX C | ABC D | ABC D | CDE

我正在尝试查找数据库中所有具有完全相同的子记录集的记录,如所提供的。听起来不太清楚,但请稍等,我会解释的

有一个带有条形码和文档字段的表格条形码:

Barcode | Document ________|_________ A | ABC A | CDE A | EFG B | XYZ B | VWX C | ABC D | ABC D | CDE D | EFG E | EFG 条形码|文件 ________|_________ A | ABC A | CDE A | EFG B | XYZ B | VWX C | ABC D|ABC D | CDE D | EFG E | EFG 如果您注意到,条形码AD具有完全相同的文档集。条形码CEAD的子集

然后我有一组文档进入函数,比如说这个文档集是ABC、CDE、EFG。这是一个列表。(条形码信息存储在SQL Server中,通过LINQ到SQL检索)。对于这组文档,我需要找到所有匹配的条形码:AD。但忽略包含文档子集的条形码:CE应被忽略

目前,我有一个递归函数,它遍历所有文档,并按传入文档集的一部分过滤掉它们。这为我提供了匹配集,但也包括子集(如CE),然后我过滤掉子集

我相信这不是解决这个问题的最好办法,必须有更优雅的办法。但我很难想出任何其他方法来做到这一点。 有什么建议吗

p、 美国。
我希望解释足够清楚,我可以提供我的代码,如果有人是受虐狂-

您可以找到输入列表中包含文档的每个条形码,按条形码分组,然后选择计数等于输入列表中文档数目的所有条形码


另一种方法是,如果您经常执行此查询,并且文档集变化不大,则可以为每个文档创建一个条形码集的内存索引(
字典
)。然后,当您有一组需要查找条形码的文档时,您可以对它们进行迭代,并将它们的集合相交。

因此,从您的示例中,您希望集合
条形码(ABC)相交条形码(CDE)相交条形码(EFG)
?差不多,但是LINQ不能使数据库条目与内存中的对象相交;您还可以找到输入列表中包含其
文档的
条码
,按
条码
分组,并选择所有计数等于输入列表中
文档
数量的
条码。@Gabe,这是计数的一个巧妙技巧,我的逻辑中遗漏了这一点!你介意把它写下来作为一个答案,这样就可以成为一个被认可的答案的候选人。