6

ビューにデータを表示するためにLINQ Self Join Queryを使用しています.my sqlテーブルにはいくつかの従業員の詳細が含まれています。

EmpID 名前 ManagerID 指定 電話アドレス
1 マイク 3 開発者 123456 テキサス
2 デビッド 3 RM 123456 デリー
3 ロジャー NULL GM 123456 ダラス
4 結婚 2 開発者 123456 NY
5 ジョセフ 2 開発者 123456 シンガポール
7 ベン 2 デベロッパー 123456 ムンバイ
8 スティーブン 3 TL 123456 バンガロール
 

名前に変更する必要があります

私のコードはコントローラのアクションにあります

var emp = from m in t.Employees
          join e1 in t.Employees on m.ManagerID equals e1.EmployeeID
          select new { Id = m.EmployeeID , 
                       Name = m.Name, 
                       Manager = e1.Name , 
                       Designation = m.Designation,
                       Phone =m.Phone ,address = m.Address };

return View(emp.Tolist());

とビューで

@model IEnumerable <mvc4application.models.employee>

しかし、ランタイムエラーが発生しています

ディクショナリに渡されるモデル アイテムの型は System.Data.Objects.ObjectQuery 1[<>f__AnonymousType16[System.Int32,System.String, System.String,System.String,System.Nullable 1[System.Int32],System.String]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[Mvc4application.Models.Employee]'.] システムです。 .Web.Mvc.ViewDataDictionary`1.SetModel(オブジェクト値) +405487

もちろん、私のビューは を使用しているため、これを理解していますMvc4application.Models.Employee type

モデル型にキャストできないので。

SQL ビューを MVC のモデルとして使用して、SQL で結合できるようにすることはできますか?

4

1 に答える 1

8

ビューが強く型付けされているのに、匿名オブジェクトを返していますIEnumerable<mvc4application.models.employee>

ビューの要件に一致し、このビューで操作したい情報を含むビュー モデルを作成することを強くお勧めします。

public class EmployeeViewModel
{
    public int EmployeeID { get; set; }
    public string Name { get; set; }
    public string ManagerName { get; set; }
    public string Designation { get; set; }
    public string Phone { get; set; }
    public string Address { get; set; }
}

次に、さまざまなドメイン EF オブジェクトをビュー モデルに射影するために、LINQ クエリを調整します。

IEnumerable<EmployeeViewModel> employees = 
    from m in t.Employees
    join e1 in t.Employees on m.ManagerID equals e1.EmployeeID
    select new EmployeeViewModel
    { 
        EmployeeID = m.EmployeeID , 
        Name = m.Name, 
        ManagerName = e1.Name,
        Designation = m.Designation,
        Phone = m.Phone,
        Address = m.Address 
    };

    return View(employees.ToList());

最後に、ビュー モデルに強く型付けされたビューを作成します。

@model IList<EmployeeViewModel>

これで、情報を提示できます。

<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Manager name</th>
            <th>Designation</th>
            <th>Phone</th>
            <th>Address</th>
        </tr>
    </thead>
    <tbody>
        @for (var i = 0; i < Model.Count; i++)
        {
            <tr>
                <td>@Html.DisplayFor(x => x[i].EmployeeID)</td>
                <td>@Html.DisplayFor(x => x[i].Name)</td>
                <td>@Html.DisplayFor(x => x[i].ManagerName)</td>
                <td>@Html.DisplayFor(x => x[i].Designation)</td>
                <td>@Html.DisplayFor(x => x[i].Phone)</td>
                <td>@Html.DisplayFor(x => x[i].Address)</td>
            </tr>
        }
    </tbody>
</table>
于 2013-07-12T08:47:35.900 に答える