0

我对此有点困惑,需要一些帮助。我正在使用 Entity Framework 4.1 开发一个 ASP.Net MVC 3 Web 应用程序。

我的一个 Razor 视图上有一个 DropDownList,我希望显示一个全名列表,例如

Tom Jones 
Michael Jackson 
James Brown

在我的控制器中,我检索用户对象列表,然后选择每个用户的名字和姓氏,并将数据传递给 SelectList。

List<User> Requesters = _userService.GetAllUsersByTypeIDOrgID(46, user.organisationID.Value).ToList();

var RequesterNames = from r in Requesters
                     let person = new { UserID = r.userID, FullName = new { r.firstName, r.lastName } }
                     orderby person.FullName ascending
                     select person;

viewModel.RequestersList = new SelectList(RequesterNames, "UserID", "FullName");

return View(viewModel);

在我的 Razor 视图中,我有以下内容

@Html.DropDownListFor(model => model.requesterID, Model.RequestersList, "Select", new { @class = "inpt_a"})
@Html.ValidationMessageFor(model => model.requesterID)

但是,当我运行代码时,出现以下错误

至少一个对象必须实现 IComparable。

我觉得好像我做错了,所以有人可以帮忙吗?

谢谢。

4

1 回答 1

4

在您的 LINQ 查询FullName中应该这样声明,否则 EF 不知道如何对您创建的匿名对象进行排序:

FullName = r.firstName + " " + r.lastName

例子:

var RequesterNames = 
    from r in Requesters
    let person = new { UserID = r.userID, FullName = r.firstName + " " + r.lastName }
    orderby person.FullName ascending
    select person;
于 2012-09-26T09:36:26.657 回答