0

私は周りを検索し、ExpandDo を動的に使用することについて話しましたが、LINQ クエリから返されたコレクションでこれを行う方法を理解できませんでした。

データベースで 2 つのテーブル (学生と登録) の間で内部結合を行っています。

    var innerJoin =
        from e in db.Enrollments
        join s in db.Student on e.StudentID equals s.StudentID
        select new { Student= s.Name , Course = e.CourseID };

私はもう試した

dynamic model = innerJoin.ToList().ToExpando();

return View(model)

そして、私が持っています

@model System.Collections.Generic.IEnumerable<dynamic>

私のView.cshtmlの上部に

しかし、Web アプリケーションでコントローラーに移動しようとすると、次のエラーが発生します。

ディクショナリに渡されたモデル項目は「System.Dynamic.ExpandoObject」型ですが、このディクショナリには「System.Collections.Generic.IEnumerable`1[System.Object]」型のモデル項目が必要です。''

私も試しました:

   dynamic model = innerJoin.ToList();

    return View(model);

しかし、私の見解(.cshtmlファイル)では

    @foreach (dynamic item in Model)
    {
        <tr>
            <td>
                @Html.Raw(item.Course)
            </td>
        </tr>
    }

@Html.Raw 行で barf します

タイプ 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' の例外が App_Web_index.cshtml.1bbec3a6.jtomobws.dll で発生しましたが、ユーザー コードで処理されませんでした

理想的にはワンライナーにしたいです。私の見解では、プロパティ バッグのコレクションを反復処理して、Student フィールドと Course フィールドを抽出できるようにしたいと考えています。したがって、プロパティ バッグには Student プロパティと Course プロパティが含まれ、それらのコレクションになります。私は多くの同様の投稿を見てきましたが、誰もこれを行っていません

ありがとうトーマス

4

1 に答える 1

1

編集済み

innerJoin.ToList().ToExpando();結合から返された匿名オブジェクトのリストを ではなく Expando オブジェクトに変換すると仮定しますIEnumerable<dynamic>。動的オブジェクトのリストを取得したい場合は、次のようなものを使用できます。

var innerJoin = from e in db.Enrollments
                join s in db.Student on e.StudentID equals s.StudentID
                select e;


var model = new List<dynamic>();
foreach(var l in innerJoin)
{
    dynamic temp = new System.Dynamic.ExpandoObject();
    temp.Student = l.StudentID;
    temp.Course = l.CourseID;
    model.Add(temp);
}

これはSystem.Collections.Generic.IEnumerable<dynamic>モデルで機能します

これはフィドルを動作させるための例です

ただし、強く型付けされたモデルを使用することをお勧めします。動的オブジェクトを使用することで、基本的に静的型付き言語の利点のほとんどをあきらめることになります。

于 2016-02-20T06:35:03.360 に答える