如何使用 Linq 根据另一个列表过滤列表?
Posted
技术标签:
【中文标题】如何使用 Linq 根据另一个列表过滤列表?【英文标题】:How to filter a list based on another list using 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 有共同的基本类型吗?
【参考方案1】:
试试这个:
var filtered = listOfAllVenues
.Where(x=>!listOfBlockedVenues.Any(y=>y.VenueId == x.Id));
它会获取ID不在blockedVenues列表中的所有Venues
【讨论】:
简化版:var filtered = listOfAllVenuses.Where(x=>listOfBlockedVenues.All(y=>y.VenueId != x.Id));
@RomanY 感谢您的评论,但我从来没有发现“所有不等于”比“没有任何”更简单,所以我发现这里没有简化:)
指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。以上是关于如何使用 Linq 根据另一个列表过滤列表?的主要内容,如果未能解决你的问题,请参考以下文章