簡體   English   中英

無法將類型“ System.String”強制轉換為類型“ System.Object”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM