C# 比较Linq中的CSV值列表,以将第二个列表中的CSV值与第一个列表中的任何值相匹配

C# 比较Linq中的CSV值列表,以将第二个列表中的CSV值与第一个列表中的任何值相匹配,c#,linq,csv,C#,Linq,Csv,有一个方法可以检索CSV值列表,我想从集合中检索相似项列表,其中相似项定义为集合中至少有一个值的任何项,该值位于要比较的项中 乙二醇 公共类的东西{ 公共int id{get;set;} 公共字符串csv{get;set;} } var things=newlist(); 添加(新事物{id=1,csv=“1,2,3”}; 添加(新事物{id=2,csv=“3,5,11,17”}; 添加(新事物{id=3,csv=“2,4,6”}; 添加(新事物{id=4,csv=“11,12,13”}; 添加

有一个方法可以检索CSV值列表,我想从集合中检索相似项列表,其中相似项定义为集合中至少有一个值的任何项,该值位于要比较的项中

乙二醇

公共类的东西{
公共int id{get;set;}
公共字符串csv{get;set;}
}
var things=newlist();
添加(新事物{id=1,csv=“1,2,3”};
添加(新事物{id=2,csv=“3,5,11,17”};
添加(新事物{id=3,csv=“2,4,6”};
添加(新事物{id=4,csv=“11,12,13”};
添加(新事物{id=5,csv=“1,2”};
var item=新事物{id=6,csv=“3,5,11”};
所以我想做一个linq查询,返回id 1、2和4

比如var q=things.Select(i=>i.id)。Where(w=>w

我就是想不通这个问题


(哦,排除了它自己,所以如果将6添加到列表中,它就不会包含在结果中)

听起来相对容易:

var itemValues = new HashSet<string>(item.csv.Split(','));
var result = things
    .Where(t => t.id != item.id && t.csv.Split(',').Any(itemValues.Contains))
    .Select(t => t.id)
    .ToList();
var itemValues=newhashset(item.csv.Split(',');
var结果=事物
.Where(t=>t.id!=item.id&&t.csv.Split(“,”).Any(itemValues.Contains))
.选择(t=>t.id)
.ToList();

首先解析并创建包含我们感兴趣的值的
HashSet
,它支持快速查找。然后使用扩展方法从列表中选择至少包含一个值的项。

是否要从列表中获取id(1,2和4)?将值存储在数组中,如var arr=new int[3]{1,2,3}var q=things.where(w=>!arr.Contains(w.Id))听起来很完美:)谢谢-我会尝试一下,非常感谢你的帮助,关键是要把它分成这两部分,非常好地使用哈希集,再次感谢你,完全冻结了大脑,非常感谢
var itemValues = new HashSet<string>(item.csv.Split(','));
var result = things
    .Where(t => t.id != item.id && t.csv.Split(',').Any(itemValues.Contains))
    .Select(t => t.id)
    .ToList();