我使用linq方法语法进行以下查询

IEnumerable<PageElement> elements_test = ObjectContext.PageElements
            .Where(_dateDebutCheck).Where(_dateFinCheck)
            .Where(_activeLanguageCheck(language));

private readonly Expression<Func<PageElement, bool>> _dateDebutCheck = pe => pe.DateDebut.HasValue && pe.DateDebut.Value <= DateTime.Now;
private readonly Expression<Func<PageElement, bool>> _dateFinCheck = pe => !pe.DateFin.HasValue || pe.DateFin.Value > DateTime.Now;

private readonly Expression<Func<PageElement, byte, bool>> _activeLanguageCheck =
        (pe, lang) => pe.PageElementLanguages.Where(y => y.Active).Select(y => y.LanguageId).Contains(lang);


对于不带参数的前两个表达式,语法似乎是正确的,如何在我的Where子句中使用language参数调用第三个表达式?

最佳答案

您可以有一个方法来创建捕获所需值的lambda,而不是使用带有额外参数的lambda:

private Expression<Func<PageElement, bool>> ActiveLanguageCheck(byte lang) {
    return pe => pe.PageElementLanguages.Where(
                    y => y.Active).Select(y => y.LanguageId).Contains(lang);
}


然后:

.Where(ActiveLanguageCheck(language))

关于c# - 在带有参数的Where子句中使用Expression <Func <>>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19791598/

10-13 08:57