6

ビューに渡したいlinqクエリを作成しましたが、このエラーが発生します

The model item passed into the dictionary is of type 'System.Data.Entity.Infrastructure.DbQuery`1[<>f__AnonymousType4`2[System.String,System.String]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1

私のViewModel

  public class ManageScoreViewModel
     {
         public string fullName { get; set; }
         public string teamName { get; set; }
     }

コントローラ

  public ActionResult Index()
        {
            MyteamViewModel ms = new MyteamViewModel ();
            var vm = (from u in db.Users
                     join tm in db.Team_Members
                     on u.user_id equals tm.user_id
                     join t in db.Teams
                     on tm.team_id equals t.team_id
                     orderby t.name
                     select new { fullName = u.firstName + u.lastName, teamName = t.name });
          //  var vmlist = vm.ToList();

            return View(vm);
        }

ビューはタイプIEnumerableです

@model IEnumerable<CTA2._0.ViewModels.ManageScoreViewModel>
@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.fullName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.teamName)
        </td>

クエリをリストに変換してみました(var vmlist = vm.ToList();)。動作しませんでした。どんな助けでもいただければ幸いです。

4

1 に答える 1

7

あなたのビューはコレクションに強く型付けされてManageScoreViewModelいますが、linq クエリはプロジェクションを使用して匿名オブジェクトを返しています。オブジェクトのリストを返す必要がありManageScoreViewModelます。ToList()linq 式にメソッドを適用することもできます

変化する

select new { fullName = u.firstName + u.lastName, teamName = t.name });

select new ManageScoreViewModel { fullName = u.firstName + u.lastName,
                                                  teamName = t.name }).ToList();
于 2012-10-23T19:01:31.507 に答える