[英]Multidimensional Array Casting Runtime Error ---> unable to cast object of type 'System.Object[,]' to type 'System.String
[英]Unable to cast the type 'System.String' to type 'System.Object'
我正在嘗試使用lambda表達式對Users
進行排序。 我的用戶班
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();
編輯
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");
但是當UserList = objUsers.SortUsers("DateCreated");
時給出錯誤
類型'System.DateTime'的表達式不能用於返回類型'System.Object'
任何幫助,將不勝感激謝謝
檢查一下:
public static List<Users> SortUsers(string sSortBy)
{
var arg = Expression.Parameter(typeof(Users), "Users");
var sortProperty = Expression.Property(arg, sSortBy);
var lambda = Expression.Lambda(sortProperty, arg);
var param = Expression.Parameter(typeof(IQueryable<Users>));
var orderByCall = Expression.Call(typeof(Queryable), "OrderBy", new Type[] { typeof(Users), sortProperty.Type }, new Expression[] { param, lambda });
var orderLambda = Expression.Lambda<Func<IQueryable<Users>, IQueryable<Users>>>(orderByCall, param).Compile();
List<Users> UserList;
UserList = orderLambda(UOWUser.UsersRepository.Entities).ToList(); // Error here
return UserList;
}
它通過Expression
構成整個source.OrderBy(x => x.PropName)
,因此您不必實際指定x.PropName
類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.