如何获得动态类型的属性值?

| [更新]   抱歉,我应该标记这个问题   作为MVC-2,我将查询结果传递给   视图的模型,所以我必须指定类型   在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的查询类型是匿名类...     
已邀请:
尝试显式声明名称:
select new { Category = d.Category,  DiscountValue = d.DiscountValue, PriceConfige = d.PriceConfige }
    
如果出于任何特定原因您都不强迫结果为
IQueryeable<dynamic>
,我建议您使用
var result = ...
。这将使编译器将类型
IQueryable<T>
result
与您使用select中的you9ѭ创建的匿名类的
T
进行匹配。您不必在此处显示的代码中使用
dynamic
。     
如果您用
var
代替不适当的声明
IQueryable<dynamic>
,请确保它起作用,我也已经对其进行了测试。     
您的问题是视图页面中的
foreach
循环被编译为单独的程序集。由于匿名类型是内部类型,因此动态由于权限不允许而看不到它。 最简单的解决方法是在查询语句中调用“ 14”,然后选择每个匿名类型并将参数复制到声明的类或expandoobject。     

要回复问题请先登录注册