C# 如何在视图中打印来自控制器的linq查询结果?

C# 如何在视图中打印来自控制器的linq查询结果?,c#,linq,asp.net-mvc-4,C#,Linq,Asp.net Mvc 4,我在控制器中有以下代码 public ActionResult Linq() { List<region> Regiones = db.region.ToList(); List<comuna> Comunas = db.comuna.ToList(); var resultado = from r in Regiones

我在控制器中有以下代码

  public ActionResult Linq()
        {
            List<region> Regiones = db.region.ToList();
            List<comuna> Comunas = db.comuna.ToList();

            var  resultado = from r in Regiones
                            join c in Comunas on r.r_id equals c.c_region
                            where r.r_id == 8
                            select new
                            {
                                region = r.r_region,
                                comuna = c.c_comuna
                            };
            ViewBag.resultado = resultado;
            return View();
        }
public ActionResult Linq()
{
List Regiones=db.region.ToList();
List Comunas=db.comuna.ToList();
var resultado=来自区域中的r
在r.r_id等于c.c_区域的Comunas中加入c
其中r.r_id==8
选择新的
{
区域=r.r_区域,
comuna=c.c_comuna
};
ViewBag.resultado=resultado;
返回视图();
}
这是我的看法

 @{ 
                           foreach(var a in ViewBag.resultado)
                           {
                              <tr><td>
                                  @a.comuna
                              </td></tr> 
                           }
                       }
@{
foreach(ViewBag.resultado中的变量a)
{
@a、 科穆纳
}
}
但是当运行此命令时,我有以下错误:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:“对象”不包含定义参数“comuna”

发生了什么事?如何打印视图中的所有“comuna”


谢谢

一个可能的解决方案是为结果创建一个新类型,如

public class Address //some good name
{
    public int Region  {get;set;};
    public string Comuna {get;set;} ;
}
他们会修改你的行为

public ActionResult Linq()
{
    List<region> Regiones = db.region.ToList();
    List<comuna> Comunas = db.comuna.ToList();

    var  resultado = from r in Regiones
                    join c in Comunas on r.r_id equals c.c_region
                    where r.r_id == 8
                    select new Address
                    {
                        Region = r.r_region,
                        Comuna = c.c_comuna
                    };
    return View(resultado);
}
public ActionResult Linq()
{
List Regiones=db.region.ToList();
List Comunas=db.comuna.ToList();
var resultado=来自区域中的r
在r.r_id等于c.c_区域的Comunas中加入c
其中r.r_id==8
选择新地址
{
区域=r.r_区域,
Comuna=c.c_Comuna
};
返回视图(resultado);
}
并更改视图:

 @model System.Collections.Generic.IEnumerable<Address>

 @{ 
   foreach(var a in Model)
   {
      <tr><td>
          @a.Comuna
      </td></tr> 
   }
}
@model System.Collections.Generic.IEnumerable
@{ 
foreach(模型中的var a)
{
@a、 科穆纳
}
}

您不应该在linq查询之后将其转换为
.ToList()
吗?我试过了,但没有这样做。谢谢@Maartenhebink foreach已经迭代了
IEnumerable
,因此没有必要将其放入列表中。威震天的解决方案应该有效。您是否尝试过在填充
视图包的位置设置断点?看看它是否真的被填满了,以及填充了什么?@AlexanderDerck感谢您的更正工作!谢谢但为什么在上面,我只写并展示{地区:一些,科穆纳:一些}?@DiegoFlores很高兴能提供帮助。你把@放在哪里了?我对Visual studio的看法,而不是在这篇文章中(对不起,我的“泰山”英语是智利语)