2016-02-20 115 views
0

我搜索了四处,并且人们都在讨论如何使用ExpandDo与动态,但我一直未能弄清楚如何执行这与从LINQ查询返回的集合。将LINQ anomyous类型结果传递给ASP.NET 5 MVC查看

我在做一个内部联接我

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> 

2个表(学生和入学率)之间的数据库在我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但在用户 代码

没有处理理想情况下,我想使之成为一个衬垫。在我看来,我希望能够遍历一系列属性包,并提取学生和课程字段。所以我的物业包包含物业学生和课程,他们会收集他们。我看过很多类似的帖子,但没有这样做

感谢 托马斯

+0

不要使用'dynamic'!使用“学生”和“课程”属性创建视图模型。 –

+0

谢谢,你可能是对的,我看到这个建议很多。无论如何,为了学习,我对如何使用动态进行实际操作感兴趣。 – Prof

回答

1

EDITED

我认为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>模型

Here is the example for working fiddle

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

+0

非常感谢,但现在我得到错误\t CS0117 \t'ExpandoObject'不包含'学生'的定义,当我尝试构建时,'Course'的定义相同 – Prof

相关问题