如何使用扩展表达式参数
本文关键字:参数 表达式 扩展 何使用 | 更新日期: 2023-09-27 18:06:00
如何使用这个扩展?
public static IQueryable<TSource> MyOrderByType<TSource>(this IQueryable<TSource> source, bool condition, Expression<Func<TSource, string>> predicate)
{
return condition ? source.OrderBy(predicate) : source.OrderByDescending(predicate);
}
我是这样用的:
using (var ctx = new MyEntities())
{
result = ctx.Users
.MyOrderByType(sortType,p=>sortKey)
.ToList();
}
搜索方法: public List<User> Search(string name, string sortKey, bool sortType)
{
List<User> result;
using (var ctx = new MyEntities())
{
result = ctx.Users
.where(u => u.name.contains(name))
.MyOrderByType(sortType, p => sortKey)
}
}
.ToList();
}
return result;
}
后面的代码:
bool sortType=ddlSortType.SelectedValue=="0"?true:false;
string sortKey=ddlSortKey.SelectedValue;
var lstUser = userService.Search(txtName.Text,sortType,sortKey);
但是它不排序结果
怎么了?
因为您没有正确传递谓词。在调用MyOrderByType
扩展时,通常选择要按User
的哪个字段排序。使用您的sortKey
字符串创建一个适当的谓词。我处理了一些案例来解析姓名和电子邮件的表达式,您可以轻松地添加另一个字段来排序。
var sortKey = "name"; // use your sortKey
Expression<Func<User, string>> sortExpression;
switch (sortKey)
{
case "email":
sortExpression = x => x.Email;
break;
case "name":
sortExpression = x => x.Name;
break;
default:
sortExpression = x => x.Name;
break;
}
using (var ctx = new MyEntities())
{
result = ctx.Users
.MyOrderByType(sortType, sortExpression)
.ToList();
}
// defined below
public class User
{
public string Name {get;set;}
public string Email {get;set;}
// other properties
}
public class MyEntities : DbContext
{
public DbSet<User> Users { get; set; }
}