gpt4 book ai didi

c# - 在带参数的 Where 子句中使用 Expression>

转载 作者:太空宇宙 更新时间:2023-11-03 19:12:17 24 4
gpt4 key购买 nike

我有以下使用 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 子句中使用语言参数调用第三个表达式?

最佳答案

与其使用带有额外参数的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com