1

親子関係データを表示する必要があります。以下は私のコードです:

@model PagedList.IPagedList<Test.Domain.TestTable> 
<table width="100%">
    <tr>
        <td>Name</td>
        <td>Parent</td>
    </tr>
    @foreach (var item in Model)
    {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ParentID)
        </td>
    </tr>
    }
    <tr>
        <td>
            Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
            -----------------
            -----------------
        </td>
    </tr>
</table>

ここで、データベースに次の構造を持つ親IDの代わりに親名を表示したいと思います
。ID ParentID
1   John    Null
2   Dean   1
3   Sam    1


親の名前を表示するために、次のコードを試しましたが、どれも機能しません。

  • @Model.Where(screenParent => screenParent.ID == item.ParentID).Select(screenParent => new { screenParent.Name})
    表示されます System.Linq.Enumerable+WhereSelectEnumerableIterator`2[Test.Domain.TestTable,<>f__AnonymousType5`1[System.String]]

コードの行の上に表示される理由を提案できますか?
また、親IDの代わりに親名を実現するために何ができるか。
前もって感謝します。

4

1 に答える 1

1

ここでいくつかの仮定をします。

代わりに、モデルにParentのプロパティがありますか、それとも単にParentIDを取得していますか?IDだけを取得する場合は、FKによってオブジェクト参照全体を取得するように、モデル/マッピングを変更することをお勧めします。

すでにParentオブジェクト全体をプルしている場合は、エンティティフレームワークが自動的にParentを遅延ロードしないことを知っておいてください。TestTableを照会するときに、ロードするように明示的に指示する必要があります。

これは2つの異なる方法で行うことができます。

  1. 親プロパティを仮想にします。すなわち

    public virtual TestTable Parent {get; セットする; }

    次に、TestTable.Parentにアクセスしようとすると、データベースからロードされます。これにより、名前にアクセスできるようになります。

  2. テストテーブルをクエリするときに、親を明示的にロードします。

    myDBContext.TestTables.Include( "YourParentPropertyName")。Where(....);

ビューの最終結果は次のようになります。

  @foreach (var item in Model)
    {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Parent.Name)
        </td>
    </tr>
    }

それが役に立ったら教えてください。

于 2012-12-11T14:29:30.507 に答える