我有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 )
}
}
}
}
答案 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();