使用匿名/动态类型的Linq调用在视图中工作

时间:2013-08-14 10:09:02

标签: asp.net .net asp.net-mvc linq

对于我的生活,我无法弄清楚为什么会这样。我只是通过链接调用一些数据并将其传递给视图。当我像这样直接传递数据时,它可以工作:

var invoices = (
  from s in navdb.Sales_Invoice_Header
  where s.Salesperson_Code == repCode
  where s.Posting_Date > date
  select s
).ToList();

但是当我在运行中创建一个匿名类型时,它不会像这样:

var invoices = (
  from s in navdb.Sales_Invoice_Header
  where s.Salesperson_Code == repCode
  where s.Posting_Date > date
  select new { 
    s.No_,
    s.Bill_to_Customer_No_,
    s.Bill_to_Name,
    s.Salesperson_Code
  }
).ToList();

在以下时间之后访问它:

<table>
@foreach (var invoice in ViewBag.invoices)
{ 
<tr>
    <td>@invoice.No_</td>
    <td>@invoice.Bill_to_Customer_No_</td>
    <td>@invoice.Bill_to_Name</td>
    <td>@invoice.Salesperson_Code</td>
</tr>
}
</table>

我得到一个:'object'不包含'No _'

的定义

我尝试添加No_ = s.No_等等,这也没有用。我做错了什么?

2 个答案:

答案 0 :(得分:1)

这里有重复的问题:Dynamic Anonymous type in Razor causes RuntimeBinderException

  

这样做的原因是传递的匿名类型   控制器在内部,所以它只能从内部访问   它声明的程序集。由于视图是单独编译的,   动态的活页夹抱怨说它不能超过那个组件   边界。

基本上,您无法以这种方式绑定匿名动态对象。定义一个特定的类或结构来解决这个问题。

答案 1 :(得分:0)

在您的第一个示例中,您获得List<whatever s is>,在第二个示例中,您获得了List<object>。并'object' does not contain a definition for 'No_'