使用 lambda 表达式过滤带有另一个列表的集合

时间:2021-02-10 20:24:00

标签: c# lambda filter

我有2个列表,第一个是事件列表 第二个是 id 国家/地区列表。

事件列表包含国家/地区列表,因此我尝试过滤包含在参数(国家/地区列表)中发送的国家/地区的事件。

我通常在这些情况下使用 foreach,但我想知道是否有办法使用 lambda 表达式过滤这些元素?

这是我使用 foreach 的代码

List<Event> finalList = new List<Event>();
 
 foreach (var eventItem in eventList)
    {
      foreach (var cItem in eventItem.CountrieList)
      {
        foreach (var pItem in countriesListParameter)
         {
           if (cItem .Id == pItem )
             {
                finalList.Add(eventItem )
             }

         }
      }

    }

1 个答案:

答案 0 :(得分:3)

使用 LINQ 时看起来是这样:

List<Event> finalEventList = eventList
    .Where(ev => ev.CountryList.Select(c => c.Id).Intersect(countriesListParameter).Any())
    .ToList();

因此所有具有 Id 的国家/地区的事件都包含在参数列表中。

您也可以使用 Contains,但如果列表很大,它的效率不如 Intersect(..).Any()

List<Event> finalEventList = eventList
   .Where(ev => ev.CountryList.Any(c => countriesListParameter.Contains(c.Id)))
   .ToList();