Asp.net 使用匿名/动态类型的Linq调用在视图中不起作用

Asp.net 使用匿名/动态类型的Linq调用在视图中不起作用,asp.net,.net,asp.net-mvc,linq,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.Sal

就我的一生而言,我不明白为什么会这样。我只是通过链接调用一些数据并将其传递给视图。当我像这样直接传递数据时,它会起作用:

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();
但当我动态创建匿名类型时,它不会这样做:

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>

@foreach(ViewBag.invoices中的var发票)
{ 
@发票,没有_
@发票、账单、客户号_
@发票、账单和发票名称
@发票.销售人员代码
}
我只得到一个:“object”不包含“No”的定义


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

在第一个示例中,您得到了一个
列表
,在第二个示例中,您得到了一个
列表
。“对象”不包含“否”的定义。

此处重复问题:

原因是在 控制器位于内部,因此只能从内部访问 声明它的程序集。由于视图是单独编译的, 动态活页夹抱怨它不能遍历该程序集 边界

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