Linq 筛选包含其他列表的列表

Linq 筛选包含其他列表的列表,linq,Linq,我有一个过滤器名称列表:FILTERBYNAMES 我的查询结果项每个都包含一个名称列表:名称 我希望筛选结果,并获取名称列表中至少包含一个名称的所有项目: results= result.where(r=>r.NAMES.CONTAINS(...?)...? 我想你需要这样的东西: var results = list.Where(i => i.Names .Any(name => filterNameLi

我有一个过滤器名称列表:FILTERBYNAMES

我的查询结果项每个都包含一个名称列表:名称

我希望筛选结果,并获取名称列表中至少包含一个名称的所有项目:

   results= result.where(r=>r.NAMES.CONTAINS(...?)...?

我想你需要这样的东西:

var results = list.Where(i => i.Names
                               .Any(name => filterNameList.Contains(name)));

我想你需要这样的东西:

var results = list.Where(i => i.Names
                               .Any(name => filterNameList.Contains(name)));

您可以通过查看两个名称集的交集来解决此问题

var filteredResult = result.Where(i => i.Names.Intersect(filter).Any());

您可以通过查看两个名称集的交集来解决此问题

var filteredResult = result.Where(i => i.Names.Intersect(filter).Any());

要限制筛选器的枚举数,可以使用哈希集

HashSet<string> hashedFilter = new HashSet<string>(filterByNames);

var results = result
  .Where(x => x.Names
    .Any(name => hashedFilter.Contains(name))
  );
HashSet hashedFilter=新的HashSet(filterByNames);
var结果=结果
.其中(x=>x.名称
.Any(name=>hashedFilter.Contains(name))
);

要限制筛选器的枚举,可以使用哈希集

HashSet<string> hashedFilter = new HashSet<string>(filterByNames);

var results = result
  .Where(x => x.Names
    .Any(name => hashedFilter.Contains(name))
  );
HashSet hashedFilter=新的HashSet(filterByNames);
var结果=结果
.其中(x=>x.名称
.Any(name=>hashedFilter.Contains(name))
);