2011-12-16 67 views
0

我試圖在數據庫中查找具有與提供的完全相同的子記錄集合的所有記錄。聽起來不太清楚,但只是掛斷,我會解釋。將內存中的集合與數據庫中的集合匹配的方法

有一個表的條碼領域條形碼和文檔:

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

如果你注意到,條形碼一個d具有完全相同的一套文件。條形碼çË一個d

子集。然後我有一組的到來在給函數的文檔,說的是一套ABC ,CDE EFG。這以列表形式出現。 (條形碼信息存儲在SQL Server中,通過LINQ to SQL檢索)。對於這組文件,我需要找到所有匹配的條碼:AD。但忽略包含子文檔的條形碼:CE應該被忽略。

此刻,我有遍歷所有文檔的遞歸函數,並通過傳入文檔集的一部分進行過濾。這爲我提供了匹配集,但也包括子集(如CE),然後我篩選出子集。

我相信這不是問題的最佳解決方案,必須有更優雅的解決方案。但我很難想出任何其他方式來做到這一點。 有什麼建議嗎?

p.s. 我希望解釋是非常明顯的,我可以提供我的代碼,如果有人是足夠的自虐 - )

+0

那麼從你的例子中,你想要設置'條碼(ABC)INTERSECT條碼(CDE)INTERSECT條碼(EFG)`? – Gabe 2011-12-16 09:37:35

回答

1

你可以找到每一個條碼,其文件包含在你的投入,集團通過條碼列表,選擇所有計數等於輸入列表中文檔數量的條形碼。

如果您經常執行此查詢並且文檔集沒有太大變化,您可以爲每個文檔(Dictionary<Document, ISet<Barcode>>)創建一組條形碼的內存索引。然後,當您有一組文檔需要查找條形碼時,您可以遍歷它們,並將它們的集合相交。