【发布时间】:2016-02-26 16:30:25
【问题描述】:
如果其他答案中涵盖了这一点,我们深表歉意。我整夜搜索并浏览了一百个其他解决方案,但无法将拼图拼凑在一起。我已经尝试过 LinqPad、PredicateBuilder、ExpressionVisitor 等,但我仍然摸不着头脑。
我正在尝试实现比这稍微复杂一些的东西,但这段代码显示了问题:
public Expression<Func<TEntity, bool>> GeneratorEqualityTest<TProperty>(Expression<Func<TEntity, TProperty>> accessor, int expectedValue) {
// Help
var argument = Expression.Parameter(typeof(TEntity));
var accessorArgument = Expression.Property(argument, accessor.ToPropertyName());
// Help
Predicate = Expression.Lambda<Func<TEntity, bool>>(Expression.Equal(accessorArgument, Expression.Constant(expectedValue)), argument);
}
当访问器是这样的时候,这很好用:x => x.Value
但不适用于x => x.Complex.Value 或x => x.Complex.MoreComplex.Value
我正在尝试从 >=5 或 (5...10] 等字符串中解析表达式并生成可以插入到 LINQ-to-EF 查询的 Where 子句中的表达式(并转换为 T -SQL)。这对于单级情况很好,但我不知道如何遍历表达式。
在 EF 中,x.Complex.MoreComplex.Value 对应 SQL Join 的。如果可以将访问器转换为我可以传递给Include() 语句的东西,则可以加分
我在 Github 上放了一个示例项目:https://github.com/scottt732/ExpressionHelp
【问题讨论】:
-
不应该是
TProperty expectedValue而不是int吗?
标签: c# entity-framework linq expression-trees