按列表过滤子集合

时间:2013-06-18 18:41:47

标签: linq filter

我有通过列表过滤子集合的som问题

我的数据模型如下;

  class Catalog
  {
      public int ID { get;set;}
      public string Name { get;set;}
      public IList<Area> Areas { get;set;}
  }

  class Area
  {
      public int ID { get;set;}
      public string Name { get;set;}
  }

假设我有以下数据:

       List<Catalog> dataSource;
       List<Area> filter;

我想通过过滤器过滤数据源,比如

    from v in dataSource where v.Areas.Contains(filter) select v

但那不起作用。

相反,我可以做如下

      List<Catalog> result = new List<Catalog>;
      foreach (Area area in filter)
      {
                result.AddRange((from v in dataSource where v.Areas.Contains(area) select v).ToList());
       }

但那不是最佳的。

任何人都可以告诉我如何通过列表过滤子集合

1 个答案:

答案 0 :(得分:0)

试试这个:

from v in dataSource where v.Areas.Intersect(filter).Any() select v;

这是有效的,因为Intersect会返回两个列表的共同点,如果它们有共同点,那么它们就会匹配。