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

发布于 2024-11-09 17:57:08 字数 869 浏览 0 评论 0 原文

[更新]

抱歉,我应该标记这个问题 作为 MVC-2,我将查询结果传递到 视图的模型,所以我必须指定类型 我的模型在视图标题中 定义。我这样声明:

Inherits="System.Web.Mvc.ViewPage>"

怎么一切都没有改变,也没有 答案对我不起作用:(。 最后我使用了 ModelView 类作为 helper 将我的查询结果放入其中。 :(

[/update]

我有一个这样的查询:

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 的查询类型是匿名类...

[update]

I'm sorry, i should tag this question
as MVC-2, I pass result of query into
view's model, so i must specify type
of my model in View's header
defintion. I declare it like this:

Inherits="System.Web.Mvc.ViewPage<IQueryable<dynamic>>"

how ever nothing changed and none of
answers doesn't work for me :(.
finally i used an ModelView class as
helper to put my query result in it.
:(

[/update]

I have a query like this:

IQueryable<dynamic> result = from d in KiaNetRepository.KiaNetEntities.Discounts
             where d.AgentTypeID == agentTypeId
             select new { d.Category,  d.DiscountValue, d.PriceConfige };

then i retrive value in my view like this:

foreach(var item in result){

    Category cat = item.Category; // throws exception 'object' does not contain a definition for 'Category' 

    //...

}

note that type of query as IQueryable is anonymouse class...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

风尘浪孓 2024-11-16 17:57:08

尝试显式声明名称:

select new { Category = d.Category,  DiscountValue = d.DiscountValue, PriceConfige = d.PriceConfige }

Try to declare names explicitly:

select new { Category = d.Category,  DiscountValue = d.DiscountValue, PriceConfige = d.PriceConfige }
懒的傷心 2024-11-16 17:57:08

如果您出于任何特定原因不强制结果为 IQueryeable,我建议使用 var result = ...。这将使编译器生成 IQueryable 类型的 result,其中 T 是您使用 new 创建的匿名类的类型{ ... } 在选择中。没有必要在此处显示的代码中使用dynamic

If you are not forcing result to be of IQueryeable<dynamic> for any specific reason, I would recommend using var result = .... This will let the compiler make result of type IQueryable<T> with T the type of the anonymous class that you create using new { ... } in the select. There is no necessity for using dynamic from the code that you show here.

木森分化 2024-11-16 17:57:08

如果您将不适当的声明 IQueryable 替换为 var,那么它肯定有效,我刚刚也测试过它。

If you replace the inappropriate declaration IQueryable<dynamic> by var, sure it works, I've just also tested it.

蓝礼 2024-11-16 17:57:08

您的问题是视图页面中的 foreach 循环被编译成单独的程序集。由于匿名类型是内部的,因此动态看不到它,因为权限不允许它。

最简单的修复方法是在查询语句上调用 ToList(),然后选择每个匿名类型并将参数复制到声明的类或扩展对象。

Your problem is that your foreach loop being in the view page gets compiled into a separate assembly. Since anonymous types are internal the dynamic doesn't see it because of the permissions don't allow it.

Simplest fix is to call ToList() on your query statement and then select each anonymous type and copy parameters to a declared class or expandoobject.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文