调用in方法的linq表达式的语法是什么

时间:2013-07-15 22:37:22

标签: c# linq lambda

我必须查询存储库,其中列a = {myvalue},列b在集合中具有任何值。

这就是我所拥有的:

Application[] applicationCollection = GetAllApplications();
var result = repo.GetAll(r => r.Email == myEmail && r.Application.In(applicationCollection));

我无法弄清楚如何编写“in”部分...

最好如何做到这一点是最好的,所以我可以学习它,而不是只是得到答案:)。谢谢大家。

(我确信这是一个重复的问题,但我的Google /搜索技能显然很差。)

4 个答案:

答案 0 :(得分:1)

item in collection的SQL思想是用C#(包括LINQ)编写的collection.Contains(item)。在您的示例中,这可能是:

var result = repo.GetAll(r => r.Email == myEmail &&
               applicationCollection.Contains(r.Application));

答案 1 :(得分:0)

ApplicationCollection.Contains(r.Application)

答案 2 :(得分:0)

使用.Contains(collection)代替inHere's a link since you wanted one.

答案 3 :(得分:0)

如果您想以您展示的方式编写,可以编写此扩展方法:

public static bool In<T>(this T item, IEnumerable<T> set)
{
    return set.Contains(item);
}

然后像你在问题中那样使用完全

Application[] applicationCollection = GetAllApplications();
var result = repo.GetAll(r =>
    r.Email == myEmail &&
    r.Application.In(applicationCollection));

如果您只使用内存集,这将正常工作。但是,如果您正在执行类似LINQ-to-SQL的操作,则这将不兼容。

注意:我并不是要暗示这种扩展方法可能是个好主意 - 我只是说可以写一个这样的。