gpt4 book ai didi

linq-to-sql 组合表达式

转载 作者:行者123 更新时间:2023-12-05 01:48:55 26 4
gpt4 key购买 nike

有什么方法可以将表达式列表合并为一个吗?我有List<Expression<Child, bool>> expList并尝试合并为一个 (AndAlso) 并得到

Expression<Child, bool> combined = Combine(expList);

组合表达式的预期用途是这样的:

//type of linqFilter is IQueryable<Parent>
linqFilter = linqFilter.SelectMany(p => p.Child).
Where(combined).Select(t=> t.Parent);

我正在尝试这样的事情:

var result = expList.Cast<Expression>().
Aggregate((p1, p2) => Expression.AndAlso(p1, p2));

但是遇到异常

{"The binary operator AndAlso is not defined for the types 'System.Func`2[Child,System.Boolean]' and 'System.Func`2[Child,System.Boolean]'."}

最佳答案

尝试将其作为构建器,这样您就必须为 expList 中的每个递归调用它

public Expression<Func<T, bool>> Combine<T>(Expression<Func<T, Boolean>> first, Expression<Func<T, Boolean>> second)
{
var toInvoke = Expression.Invoke(second, first.Parameters);

return (Expression<Func<T, Boolean>>)Expression.Lambda(Expression.AndAlso(first.Body, toInvoke), first.Parameters);
}

关于linq-to-sql 组合表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2553805/

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