我有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个项目,List2中存在来自List1的600个项目。所以在这种情况下我需要1400作为我的输出List作为list1。那么表达方式是什么呢?
此外还有一个案例,因为List1包含各种项目,其他项目值可能不同但DCN必须相同。我只需要检查DCN的相似性。
以下是我的课程。现在从datatable我将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); } }
}
所以在我的情况下我在List<string>Dcns and 110K DCNS in List<DocumentInfo>
中有493K DCNS。我需要从110K DCN过滤重复记录。或者可以说减去两个列表。我需要删除List中存在的所有重复dcns。说如果70K记录重复,那么我的结果文档信息列表将是剩余的40K列表。区别/除外不起作用。 LINQ / Lambda Exp将是首选。
我迫切需要它,尽快。
先谢谢。
答案 0 :(得分:3)
var dcnSet = new HashSet<string>(Dcns);
docInfoList.RemoveAll(el => dcnSet.Contains(el.DCN));
HashSet
并非严格必要,但它在O(m * n)和O(m + n)之间产生差异,其中m和n是每个列表中元素的数量。< / p>
编辑:
RemoveAll
从现有的List
中删除元素。它不会创建新的List
。它返回删除的元素数,但如果你不关心它,你可以放弃返回值。