针对IEnumerable <string> </string> </t>过滤IEnumerable <t>

时间:2014-07-16 14:21:22

标签: c# linq entity-framework lambda

我有一个对象Style,其属性为StockNumber。我想针对用户在搜索中输入的Db.Styles过滤所有IEnumerable<string> stockNumbers的列表。 DB.StylesIEnumerable<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对象相交,但是从搜索的库存号中逐个加载样式似乎是很多不必要的代码。我想知道是否有更简单的方法。或者我是否需要使用自己的方法来过滤结果?

4 个答案:

答案 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;