我想排序Users
使用lambda表达式。我的用户类无法将类型'System.String'强制类型为'System.Object'
public class Users
{
public long Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateCreated { get; set; }
}
和我的排序方法
public List<Users> SortUsers(string sSortBy)
{
var arg = Expression.Parameter(typeof(Users), "Users");
var body = Expression.Convert(Expression.Property(arg, sSortBy), typeof(object));
var lambda = Expression.Lambda<Func<Users, object>>(body, arg);
List<Users> UserList;
UserList = UOWUser.UsersRepository.Entities.OrderBy(lambda).ToList(); // Error here
return UserList;
}
我被
List<Users> UserList;
UserList = objUsers.SortUsers("FirstName");
访问方法,我路过sSortBy
为string
(这里的 “名字”)
错误:无法投射类型'System.String'来键入'System.Object'。
配管线UserList = UOWUser.UsersRepository.Entities.OrderBy(lambda).ToList();
EDIT
public List<Users> SortUsers(string sSortBy)
{
var arg = Expression.Parameter(typeof(Users), "Users");
var TType = Expression.Property(arg, sSortBy).Type;
var body = Expression.Convert(Expression.Property(arg, sSortBy), TType);
var lambda = Expression.Lambda<Func<Users, object>>(body, arg);// Error here :: Expression of type 'System.DateTime' cannot be used for return type 'System.Object'
List<Users> UserList;
UserList = UOWUser.UsersRepository.Entities.OrderBy(lambda).ToList();
return UserList;
}
正常工作与UserList = objUsers.SortUsers("FirstName");
但给错误时,不能使用类型 '的System.DateTime' 的UserList = objUsers.SortUsers("DateCreated");
表达退货类型为 'System.Object的'
任何帮助,将不胜感激谢谢
我认为你需要在Convert方法中使用'typeof(string)'而不是'typeof(object)' –
@ Selman22感谢您的反馈,但typeof(string)只能用于字符串属性,如果我必须按Id排序然后它应该是typeof(int),所以我不能和需要一个通用的方法,应该为字符串,整型,日期时间等工作,所以我用typeof(object) – pravprab
hmm,然后得到你的属性类型与反射,然后通过它?像:'typeof(Users).GetProperty(sSortBy).PropertyType' –