0
我用ObjectDataSource替換了一個SqlDataSource。這裏的頁面加載,我想行通過用戶名進行分類,之後由所選擇的列的我的選擇方法EF:當我使用相同的簽名定義委託時,OrderBy不起作用
Func<User, string> sortByDlg = (u) =>
{
string sortStr = string.IsNullOrEmpty(sortColumn) ? "UserName" : sortColumn;
return sortStr;
};
var users = db.Users.OrderBy(sortByDlg).ToList();
第一次的部分。
當我運行代碼時,沒有排序發生。它只有在我放回匿名方法時才起作用:OrderBy(u => u.UserName)
。
下面是完整的方法
public static List<UserViewModel> GetAllUserViewModels(string sortColumn)
{
using (var db = myDbContext.Create())
{
var model = new List<UserViewModel>();
Func<User, string> sortByDlg = (u) =>
{
string sortStr = string.IsNullOrEmpty(sortColumn) ? "UserName" : sortColumn;
return sortStr;
};
var users = db.Users.OrderBy(sortByDlg).ToList();
foreach (var item in users)
{
var u = new UserViewModel
{
UserID = item.Id,
First_Name = item.FirstName,
Last_Name = item.LastName,
telephone = item.Telephone,
//more here ...
};
model.Add(u);
}
return model;
}
}
感謝您的幫助
是。這是傳遞每個項目被返回。 – Richard77
它是由常量「UserName」排序 - 對於每一行(不是列UserName中的值)。就像這樣:'.OrderBy(u =>「UserName」)' –
只需添加到@RobertMcKee的評論中,您的委託需要返回要排序的值而不是列的名稱。您可以擴展此委託以使用反射返回指定屬性的值。 – Rob