0

我四处搜索,人们谈论将 ExpandDo 与动态一起使用,但我无法弄清楚如何使用从 LINQ 查询返回的集合来执行此操作。

我正在两个表(学生和注册)之间对我的数据库进行内部连接

    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 行与

App_Web_index.cshtml.1bbec3a6.jtomobws.dll 中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的异常,但未在用户代码中处理

理想情况下,我想把它做成一个班轮。在我看来,我希望能够遍历一组属性包,并提取学生和课程字段。所以我的属性包将包含属性 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 回答