【发布时间】:2018-06-01 01:28:59
【问题描述】:
Marc Gravell 在这个post 中的答案解释了如何创建这样的表达式:
var lambda = CreateExpression<SomeModel, bool>("IsAlive");
是否可以避免显式类型 bool 并且该方法从“IsAlive”属性获取返回类型?
类似这样的:
var lambda = CreateExpression<SomeModel>("IsAlive");
而 lambda 将是 Expression<Func<SomeModel, bool>>。
在:
var lambda = CreateExpression<SomeModel>("StringProperty");
lambda 将是 Expression<Func<SomeModel, string>>。
【问题讨论】:
-
出于某种原因你想避免显式类型吗?如果是因为您想为不共享任何接口类型的不同模型重用它,您可能希望使用动态。但我不太确定它是否会起作用
-
我已经尝试过动态但不起作用。
-
这里确实需要该类型,否则你希望如何使用返回的表达式?
-
@DavidG 这正是您遇到的问题。不确定这是一个好方法,但这是一个有趣的学习练习。
-
@TheSoftwareJedi 关键是它几乎肯定不是一个好方法。您已经发现您现在有一个弱类型的表达式(即
LamdaExpression而不是Expression<Func<SomeModel, string>)。
标签: c# linq lambda expression