public ActionResult Day() { var q = from o in _db.Orders group o by o.OrderState into g select new {g.Key, Count = g.Sum(o => o.Id)}; return View(q); }
以是有控制器中的代码,视图层:
@foreach (var item in Model) { <td>@item.Key</td> }
异常:object”未包含“Key”的定义,但是直接显示@item的话会显示{Key=ABC,Count=12}.求解
你如果select new xxModel{
key=g.key
count=g.sum(o=>o.id)
}
页面直接
@Model.key就行了
这个我明白!但是定义了一个新类!从理论上来说!我为了在页面显示某项组合数据,去定义一个类!不是我想要的,dynamic 动态类型可以实现!在ASP.NET MVC中貌似存在这个问题!我以为ASP.NET MVC 3里不会存在!看来我错了!
因為 你 是object類型哦。你可以定義一個類。處理哦
我就是想用 dynamic 不想在定义一个新类!
可以用new KeyValuePaire<string,int>
如果我 select(Field=g.Key, Field2 = g.Sum(o => o.Id),Field3=....)这样多个字段呢?就是不想在定义一个类!想用动态类!
@bdqlaccp:
return View(ToDic(q));
ToDic方法:用反射取出属性和值放到字典里
@item["xx"]来使用
再定义一个类型吧。
我就是想用dynamic 不想在定义一个新类!
@bdqlaccp:
网上说在foreach这个里面这样写就行了,你试下,我没试过
item.GetType().GetProperty("Key").GetValue(item,null)
@学学学习: 嗯 试一下楼上的 应该没问题 不过这样的话。。不建议 反射效能很差哦
@学学学习: 此方法确实可以!以前知道这个问题!我以为ASP.NET MVC3 行了!结果还是不行,以前看老赵的这篇文章知道原委 http://kb.cnblogs.com/page/114467/
谢谢各位
@ChixTech: 问下,我用mono.cecil那遍说明来,遇到 正由另一进程使用,因此该进程无法访问此文件 的问题,,不知有没有类型的解决办法
mark
用dynamic变量,实例化一个ExpandoObject类型,就可以了
dynamic d = new ExpandoObject();
这才是正解,今天刚好碰到这个问题
ExpandoObject 是不是添加属性,得一个一个添加,不像 dynamic o=new { p1="p1",p2="p2", p3="p3" }; 似的,来得简洁,
item.GetType().GetProperty("Key").GetValue(item,null) 这个有没更便捷的处理方式啊,求教