【问题标题】:How to filter a list based on another list using Linq?如何使用 Linq 根据另一个列表过滤列表?
【发布时间】:2013-09-24 09:34:26
【问题描述】:

我有这两个列表,一个是 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)

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

非常感谢

【问题讨论】:

  • 所以你想要listOfAllVenues Except listOfBlockedVenues 中的所有内容?
  • @Corak 是的,但类型不同
  • @Corak 是的,完全正确:) 类型不同,是的,但是 listOfAllVenues 有一个 int ID 字段,而 listOfBlockedVenues 有一个 VenueID int 字段,我需要使用这两个
  • 啊,不同的类型(为什么?o_O),太糟糕了。所以@wudzik 的回答。 ^_^
  • Venue 和 BlockedVenue 有共同的基本类型吗?

标签: c# visual-studio-2010 linq


【解决方案1】:

试试这个:

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

它会获取ID不在blockedVenues列表中的所有Venues

【讨论】:

  • 简化版:var filtered = listOfAllVenuses.Where(x=&gt;listOfBlockedVenues.All(y=&gt;y.VenueId != x.Id));
  • @RomanY 感谢您的评论,但我从来没有发现“所有不等于”比“没有任何”更简单,所以我发现这里没有简化:)
  • 指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2020-08-14
  • 2019-01-17
  • 1970-01-01
相关资源
最近更新 更多