0

私はこれで少し混乱しており、少し助けが必要です. Entity Framework 4.1 を使用して ASP.Net MVC 3 Web アプリケーションを開発しています。

Razor ビューの 1 つに DropDownList があり、フル ネームのリストを表示したい、たとえば

Tom Jones 
Michael Jackson 
James Brown

私のコントローラーでは、ユーザー オブジェクトのリストを取得し、各ユーザーの FirstName と LastName を選択して、データを 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 Viewには次のものがあります

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

ただし、コードを実行すると、次のエラーが発生します

少なくとも 1 つのオブジェクトが 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 に答える