[更新]
对不起,我应该标记这个问题 作为MVC-2,我将查询结果传递给 view的模型,所以我必须指定类型 我的模型在View的标题中 确定指标。我声明这样:
Inherits="System.Web.Mvc.ViewPage<IQueryable<dynamic>>"
怎么都没有改变,也没有改变 答案对我不起作用:(。 最后我用了一个ModelView类 帮助我将查询结果放入其中。 :(
[/更新]
我有这样的查询:
IQueryable<dynamic> result = from d in KiaNetRepository.KiaNetEntities.Discounts
where d.AgentTypeID == agentTypeId
select new { d.Category, d.DiscountValue, d.PriceConfige };
然后我在我看来像这样追溯价值:
foreach(var item in result){
Category cat = item.Category; // throws exception 'object' does not contain a definition for 'Category'
//...
}
请注意,IQueryable的查询类型是匿名类...
答案 0 :(得分:0)
尝试明确声明名称:
select new { Category = d.Category, DiscountValue = d.DiscountValue, PriceConfige = d.PriceConfige }
答案 1 :(得分:0)
如果您因任何特定原因未强制结果为IQueryeable<dynamic>
,我建议您使用var result = ...
。这将使编译器使用result
IQueryable<T>
类型T
,并使用new { ... }
在select中创建的匿名类的类型。没有必要使用您在此处显示的代码中的dynamic
。
答案 2 :(得分:0)
如果您用IQueryable<dynamic>
替换不合适的声明var
,请确保它有效,我刚刚对其进行了测试。
答案 3 :(得分:0)
您的问题是视图页面中的foreach
循环被编译为单独的程序集。由于匿名类型是内部的,因此动态不会看到它,因为权限不允许它。
最简单的解决方法是在查询语句中调用ToList()
,然后选择每个匿名类型并将参数复制到声明的类或expandoobject。