如何使用Linq基于另一个列表过滤列表?

iAt*_*_it 29 c# linq visual-studio-2010

我有这两个列表,一个是Venue对象列表,一个是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)
Run Code Online (Sandbox Code Playgroud)

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

非常感谢

Kam*_*ski 51

试试这个:

var filtered = listOfAllVenuses
                   .Where(x=>!listOfBlockedVenues.Any(y=>y.VenueId == x.Id));
Run Code Online (Sandbox Code Playgroud)

它将获得Id不在blockedVenues列表中的所有场地

  • 简化:`var 过滤 = listOfAllVenuses.Where(x=&gt;listOfBlockedVenues.All(y=&gt;y.VenueId != x.Id));` (5认同)
  • @RomanY感谢您的评论,但我从未发现“全部不等于”比“没有任何”更简单,所以我在这里没有发现任何简化:) (2认同)