首页 新闻 赞助 找找看

Linq To Sql 如何较好实现根据sortExpression排序的方法?

0
悬赏园豆:20 [已关闭问题]
 var param = Expression.Parameter(typeof (T), "key");
var property
= Expression.Property(param, sortExpression);

//是否值类型
bool valueFlag = property.Type.BaseType.Equals(typeof(ValueType));

//因为值类型不能用else里面的Func<T, object>签名的委托,所以把值类型的情况特殊出来
if(valueFlag)
{
//获取值类型的类型名
string typeName = property.Type.FullName;

/*
* 如果这样写
Expression expr;
expr = Expression.Lambda<Func<T, int>>(property, param);
GetTable.OrderBy(expr); //这里会通不过编译
*/
switch (typeName)
{

case "System.Int16":
case "System.Int32":
case "System.Int64":
return descFlag
? GetTable.OrderByDescending(Expression.Lambda<Func<T, int>>(property, param))
: GetTable.OrderBy(Expression.Lambda
<Func<T, int>>(property, param));
//这里非常猥琐,每实现一组值类型的分支,就要写一遍这个return,如何能写更好?

break;
default:
break;
}

 

以上的代码片段的switch里面写得十分猥琐,如何改进?

原来打算

Expression expr;

switch(...)
{
    case xxx:
        expr = ....;
    ....
}

GetTable.OrderBy(expr);//这里会通不过编译,提示IEnumerable和IQueryable都是方法的Candidates

 

完整方法:

 

Code

 

 

vls的主页 vls | 初学一级 | 园豆:170
提问于:2009-03-20 16:04
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册