针对IEnumerable 过滤IEnumerable

我有一个具有属性StockNumber的对象Style 。 我想根据用户在搜索中输入的IEnumerable stockNumbers过滤所有Db.Styles的列表。 DB.Styles是一个IEnumerable 。 这基本上是我想要做的:

 public IEnumerable LoadListOfStyles(IEnumerable stockNumbers) { return Db.Styles.Intersect(stockNumbers); // Need to filter Db.Styles based on stockNumbers } 

那么有没有一种简单的方法可以将Db.Styles中所有样式的列表与Db.Styles中的搜索值进行stockNumbers以返回仅用户搜索过的Styles的筛选列表? 我看到能够做到这一点的唯一方法是让2个IEnumerable对象相交,但是从搜索的库存号中逐个加载样式似乎是很多不必要的代码。 我想知道是否有更简单的方法。 或者我是否需要使用自己的方法来过滤结果?

 return db.Styles.Where(style => stockNumbers.Any(sn => sn == style.StockNumber)); 
 public IEnumerable 

考虑一个Where子句。

 public IEnumerable 

您可以将Intersect视为有效的Join ,其中每个对象的键始终是“自己”。 在这里,您希望执行一个键并不总是“本身”的连接,因此您使用Join (或者,如果您需要删除重复项,则使用GroupJoin )。

 var query = from style in Db.Styles join number in stockNumbers on style.StockNumber equals number into numbers where numbers.Any() select style;