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