Lambda语句相交

时间:2014-10-14 19:56:46

标签: c# lambda intersect

尝试在不进行foreach等的情况下计算出这个lambda查询。我目前有一个数据库表,其中包含一个逗号分隔的字符串列表。它基本上是一个过滤器(例如它可以是裤子,上衣,T恤,手套等)。在查询数据库的函数中,基本上有一个接受类似字符串的参数。

我不知道我现在是否已经太累了,不能解决问题但是会挣扎。我知道它将是Intersect,但无法弄清楚语法。

目前我有......

    public static List<ItemListItem> GetItems(string filter = "")
    {
        var db = new dbConnection();

        var results = (from i in db.Items
                       select i);

        if (!string.IsNullOrEmpty (filter))
            results = results.Where(x => x.Filters.Split(',').Intersect(filter.Split(',')) )

    }

1 个答案:

答案 0 :(得分:2)

Enumerable.Any的末尾需要Intersect,如:

x.Filters.Split(',').Intersect(filter.Split(',')).Any()

所以你的查询是:

results = results.Where(x => x.Filters.Split(',')
    .Intersect(filter.Split(','))
    .Any()); 

Enumerable.Where需要返回bool的表达式。 Intersect会返回IEnumerable<T>Enumerable.Where会拒绝接受。添加Enumerable.Any意味着返回交叉点导致任何行的那些行。