2
假设我有以下功能如何传递表达式树的默认参数?
Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)
我想传递默认参数等的OrderBy = E => e.ID
,使得如果没有定义该参数时,默认被排序的表达ID。
这怎么可能?
假设我有以下功能如何传递表达式树的默认参数?
Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)
我想传递默认参数等的OrderBy = E => e.ID
,使得如果没有定义该参数时,默认被排序的表达ID。
这怎么可能?
有两个问题在这里:
e => e.ID
可能无效对于用于提供您可以排序工作使用常量的T
做这件事:
public Whatever GetAllByAge<T>(int age,
Expression<Func<Person, T>> orderBy = null)
{
orderBy = orderBy ?? (Expression<Func<Person, T>>)
(Expression<Func<Person, int>>)(e => e.Id);
...
}
(假设ID
类型是int
)
...但如果T
不是int
投将失败。请注意,对于“内部”部分来说,双重强制转换最初会告诉编译器您想要将该lambda表达式转换为哪个表达式树,而“外部”部分则是强制将其作为T
的适当表达式树类型。
我会尝试使用超载而不是:
public Whatever GetAllByAge(int age)
{
return GetAllByAge(age, e => e.ID);
}
哦,我错过了泛型参数!最好与超负荷一起去。 – 2011-04-16 22:40:54
很好的答案,谢谢:) – Karim 2011-04-16 23:18:56