什么';s此linq表达式调用in方法的语法

本文关键字:in 调用 方法 语法 表达式 linq 什么 | 更新日期: 2023-09-27 18:22:43

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

这是我的:

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

我不知道如何写"in"部分。。。

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

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

什么';s此linq表达式调用in方法的语法

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

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

使用.Contains(collection)而不是in。这是一个链接,因为你想要一个。

如果你想按照你所展示的方式编写它,你可以编写这个扩展方法:

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的操作,这将是不兼容的。

注意:我并不是想暗示这个扩展方法可能是个好主意——我只是说可以写这样的方法