我使用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/