繁体   English   中英

如何使用 Linq 根据另一个列表过滤列表?

[英]How to filter a list based on another list using Linq?

我有这两个列表,一个是场地对象列表,一个是BlockedVenues对象列表。

我需要过滤listOfAllVenues中的每个项目,以便它不包含任何被阻止的地点

     IQueryable<Venue> listOfAllVenues = MyDB.Venues;
     IQueryable<BlockedVenue> listOfBlockedVenues = Mydb.BlockedVenue;
     //I need something to accomplish this please
     // var listOfAllVenues_WithoutBlocked_Venues = 
                           ( Select All venues from listOfAllVenues
                             where listOfAllVenues.ID is NOT in
                             listOfBlockedVenues.VenueID)

请注意,是的,两种列表类型都不同,但是listOfAllVenues有一个 int ID 字段,而listOfBlockedVenues有一个 VenueID int 字段,我需要使用这两个

非常感谢

试试这个:

var filtered = listOfAllVenues
                   .Where(x=>!listOfBlockedVenues.Any(y=>y.VenueId == x.Id));

它将获取所有 Id 不在被阻止的场所列表中的场所

从 .NET 6 开始,您可以使用ExceptBy

var filtered = allVenues.ExceptBy(blockedVenues.Select(x => x.VenueID), venue => venue.ID);

这将获得所有场地,除了 ID 在blockedVenues.Select(x => x.VenueID)中的场地

https://learn.microsoft.com/en-us/do.net/api/system.linq.enumerable.exceptby?view.net-6.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM