Linq根据另一个列表过滤对象列表

时间:2013-06-17 09:21:52

标签: c# .net linq list where

我有一个列表,每个都有一个国家列表属性:

public class Thing
{
  public string Name
  public List<Country> Countries;
}

List<Thing> AllThings;

现在我还有一系列我感兴趣的国家:

List<Country> interestingCountries;

如何在我的interestingCountries列表中找到所有县的所有东西? 例如,我有这些东西:

thing1.countries = (NL, BE, FR)
thing2.countries = (NL, BE)
thing3.countries = (FR, BE)
thing4.countries = (NL, BE)
thing5.countries = (NL)

这些有趣的国家:

interestingCountries = (NL, BE)

结果应该包括: thing1,thing2,thing4

我试过了:

result = AllThings;
      foreach (var country in interestingCountries )
            result = result.Where(p => p.Countries.Any(c => c == land));   

这会返回所有将NL或BE作为国家/地区的内容...

3 个答案:

答案 0 :(得分:1)

尝试使用Contains并执行:

var list = AllThings.Where(at => at.Countries.Where(c => interestingCountries.Contains(c.CountryName))).ToList();

答案 1 :(得分:1)

试试这个:

AllThings.Where(thing => thing.Countries.Intersect(interestingCountries).Count() == interestingCountries.Count);

答案 2 :(得分:1)

对于每次thing测试,如果interestingCountries包含thing.Countries中没有的任何元素。 (这将返回thing1,thing2和thing4。)

AllThings.Where(t => !interestingCountries.Except(t.Countries).Any());