如何为表达式树传递默认参数?
假设我有以下函数,
Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)
我想传递表达式的默认参数,例如 OrderBy = e=>e.ID
这样如果这个参数没有定义,默认是按照id排序。
这怎么可能?
suppose i have the following function
Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)
i want to pass a default parameter for the Expression like OrderBy = e=>e.ID
so that if this parameter is not defined, the default is sorting by id.
how is this possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这里有两个问题:
e => e.ID
对于提供的T
可能无效您可以通过执行以下操作来解决此问题:(
假设
ID
的类型是int
)...但是如果
T
不是int
则转换将会失败。请注意,双重转换用于“内部”部分,最初告诉编译器要将 lambda 表达式转换为哪种表达式树,而“外部”部分则强制其成为T。
我很想使用重载来代替:
There are two problems here:
e => e.ID
may not be valid for theT
that's providedYou can sort of work round this by doing:
(assuming the type of
ID
isint
)... but the cast will fail if
T
isn'tint
. Note that the double cast is for the "inner" part to originally tell the compiler what expression tree you want to convert the lambda expression to, and the "outer" part is to then force that to be the appropriate expression tree type forT
.I'd be tempted to use overloading instead: