2010-08-11 84 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