针对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;