这是我想要实现的一个简化示例,我不确定它是否可能或者我是否会这样做。
Expression<T, bool> UseDataContext<T>(Expression<Func<DataContext, T, bool>> expr, Expression dataContextExpr){
// use ExpressionVisitor and return new LambaExpression
}
Expression<Func<DataContext, Foo, bool>> fooFilterExpr = (db, foo)
=> db.FilteredFoos.Any(vf => vf.FooId == foo.Id);
Expression<Func<DataContext, Bar, bool>> barExpr = (db) => (
from bar in db.Bars
join foo in db.Foos.Where(UseDataContext(fooFilterExpr, ?db Expression?))
select bar
);
答案 0 :(得分:1)
基本上不直接。这不是语法中可用的东西。你必须为此手动创建所有lambda。
建议:采取一个简单但有效的示例,并通过https://sharplab.io/
运行它,将C#指定为“结果” - 这将为您提供手动代码,包括ParameterExpression
,您然后可以使用手动编写的版本替换它; example。然后替换你需要的位。
我从来没说过会很漂亮......