我有一个对象Style
,其属性为StockNumber
。我想针对用户在搜索中输入的Db.Styles
过滤所有IEnumerable<string> stockNumbers
的列表。 DB.Styles
是IEnumerable<Style>
。这基本上就是我想要做的事情:
public IEnumerable<Style> LoadListOfStyles(IEnumerable<string> stockNumbers)
{
return Db.Styles.Intersect(stockNumbers);
// Need to filter Db.Styles based on stockNumbers
}
因此有一种简单的方法可以将Db.Styles
中所有样式的列表与stockNumbers
中的搜索值进行比较,以返回仅用户搜索过的Styles
的过滤列表?我看到能够做到这一点的唯一方法是让2个IEnumerable对象相交,但是从搜索的库存号中逐个加载样式似乎是很多不必要的代码。我想知道是否有更简单的方法。或者我是否需要使用自己的方法来过滤结果?
答案 0 :(得分:1)
public IEnumerable<Style> LoadListOfStyles(List<string> stockNumbers)
{
return db.Styles.Where(s => stockNumbers.Contains(s.StockNumber));
}
答案 1 :(得分:1)
考虑一个Where
条款。
public IEnumerable<Style> LoadListOfStyles(IEnumerable<string> stockNumbers)
{
return Db.Styles.Where(style => !stockNumbers.Contains(style.StockNumber));
}
答案 2 :(得分:1)
return db.Styles.Where(style => stockNumbers.Any(sn => sn == style.StockNumber));
答案 3 :(得分:1)
您可以将Intersect
视为有效的Join
,其中每个对象的键始终是&#34;他们自己&#34;。在这里,您希望执行一个联接,其中密钥始终&#34;本身&#34;,因此您使用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;