将内存中的集匹配到数据库中的集的方法

时间:2011-12-16 09:29:43

标签: c# linq set

我正在尝试查找数据库中具有完全相同的子记录集的所有记录,如提供的那样。听起来不是很清楚,但只是挂断,我会解释。

表条形码包含字段条形码和文档:

Barcode | Document
________|_________
    A   |    ABC
    A   |    CDE
    A   |    EFG
    B   |    XYZ
    B   |    VWX
    C   |    ABC
    D   |    ABC
    D   |    CDE
    D   |    EFG
    E   |    EFG

如果您注意到,条形码 A D 具有完全相同的文档集。条形码 C E A D

的子集

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

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

我认为这不是问题的最佳解决方案,必须有更优雅的解决方案。但我很难想到其他任何方法。 有什么建议吗?

P.S。 我希望解释清楚,我可以提供我的代码,如果有人足够自虐 - )

1 个答案:

答案 0 :(得分:1)

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

如果您经常执行此查询并且文档集不会发生太大变化,则可以使用另一种方法,您可以为每个文档(Dictionary<Document, ISet<Barcode>>)创建一组条形码的内存索引。然后,如果您有一组文档需要查找条形码,您可以迭代它们,相交它们的集合。