【问题标题】:Pass LINQ anomyous type results like a collection of property bags to a ASP.NET 5 MVC View将 LINQ 匿名类型结果(如属性包集合)传递给 ASP.NET 5 MVC 视图
【发布时间】:2016-06-01 21:16:56
【问题描述】:

我四处搜索,人们谈论将 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 行与

类型异常 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' 发生在 App_Web_index.cshtml.1bbec3a6.jtomobws.dll 但未在用户中处理 代码

理想情况下,我想把它做成一个班轮。在我看来,我希望能够遍历一组属性包,并提取学生和课程字段。所以我的属性包将包含属性 Student 和 Course,它们是它们的集合。我看过很多类似的帖子,但没有人这样做

谢谢 托马斯

【问题讨论】:

  • 不要使用dynamic!创建具有属性StudentCourse 的视图模型。
  • 谢谢,你可能是对的,我看到了很多建议。无论如何,为了学习,我对如何使用动态来实现这一点很感兴趣。

标签: c# asp.net asp.net-mvc linq expando


【解决方案1】:

已编辑

我假设innerJoin.ToList().ToExpando(); 将从连接返回的匿名对象列表转换为 Expando 对象,而不是IEnumerable&lt;dynamic&gt;。如果您想获取动态对象列表,您可以使用以下内容:

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&lt;dynamic&gt; 模型

Here is the example for working fiddle

虽然我真的建议你使用强类型模型。通过使用动态对象,您基本上放弃了statically typed languages 的大部分优势。

【讨论】:

  • 非常感谢,但现在我收到错误 CS0117 'ExpandoObject' 不包含 'Student' 的定义,当我尝试构建时,Course 也是如此
猜你喜欢
  • 2012-07-07
  • 2010-09-18
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多