我想排序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' –