2010-08-11 87 views
1

我有一個List<my_Custom_Class> and List<string>。我的自定義課程有各種項目,其中一個是DCN號碼,list<string>僅包含DCN號碼。所以我需要檢查List<Custom_Class> contains any dcn from List<string>.尋找名單之間的差異

例如假設List1 = List<Custom_Class> and List2 = List<String>。如果List1有2000個項目,並且list2有40000個項目,其中來自List1的600個項目存在於List2中。所以在這種情況下,我需要1400作爲我的輸出列表爲list1。那麼表達是什麼。 此外,由於List1包含各種項目,因此其他項目的值可能不同,但DCN必須相同。我只需要檢查DCN的相似性。

以下是我的課程。現在,從數據表中我加入DCN到List<String> Dcns;

public class DocumentInfo 
    { 

     public string ImageType { get; set; } 
     public string FileFullPath { get; set; } 
     public string BatchName { get; set; } 
     public string FileName { get; set; } 
     public string DCN { get; set; } 
     public string MemberID { get; set; } 
     public string NPI { get; set; } 
     public string TaxID { get; set; } 
     public string Client { get { return DCN.Substring(0, 2); } } 
    } 

所以在這裏我來說,我有493K DCNS在List<string>Dcns and 110K DCNS in List<DocumentInfo>。我需要過濾來自110K DCN的重複記錄。或者可以說減去這兩個列表。我需要刪除List中存在的所有重複的dcns。說如果70K記錄是重複的,那麼我的文檔信息列表將是其餘40K列表。獨特/除外不起作用。 LINQ/Lambda Exp將是可取的。

我迫切需要它,並儘快。

謝謝你。

+0

你關心性能嗎? – 2010-08-11 04:26:42

+0

現在我沒有任何這樣的問題,因爲這是一個具有獨特的dcns上傳過程的一次性過程,但可能會更晚。您認爲多少時間,它將花費100K處理500K。 – 2010-08-11 04:31:09

回答

4
var dcnSet = new HashSet<string>(Dcns); 
docInfoList.RemoveAll(el => dcnSet.Contains(el.DCN)); 

HashSet的不是嚴格必需的,但它使(m * n個)和O(M + N)O之間的差,其中是m和n中的每個列表中的元素的數量。

編輯:

RemoveAll去除現有List代替的元件。它不創建新的List。它返回被刪除元素的數量,但如果你不關心這個,你可以放棄返回值。

+0

這裏是什麼? – 2010-08-11 04:34:51

+0

它返回我int,我需要列表..請幫助 – 2010-08-11 04:41:50

+1

'el'是lambda表達式的參數,保存當前元素。該lambda是一個謂詞(布爾函數),它將爲'docInfoList'的每個元素調用。它返回true,元素將被刪除。 – 2010-08-11 04:43:58