2016-03-04 52 views
2

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

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(); 
     } 

后续的代码,这在视图

@{ 
          foreach(var a in ViewBag.resultado) 
          { 
           <tr><td> 
            @a.comuna 
           </td></tr> 
          } 
         } 

但是当这个来看,我有如下错误:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'object' no contiene una definición para 'comuna'.

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

谢谢!

+1

你不应该将其丢linq查询后的'.ToList()'? – Maarten

+0

我试过了,不是那样工作的。谢谢!! –

+1

@MaartenHeebink foreach已经迭代了'IEnumerable',所以把它放在列表中并不是必须的。 Megatron的解决方案应该可以工作。 –

回答

3

其中一个可能的解决方案是创建结果的新型像

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); 
} 

,并更改视图:

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

@{ 
    foreach(var a in Model) 
    { 
     <tr><td> 
      @a.Comuna 
     </td></tr> 
    } 
} 
+0

它的工作!谢谢!! 但为什么以上,我只写@和显示{区域:一些,科纳纳:一些}? –

+0

@DiegoFlores很高兴有帮助。你把@放在哪里? – Marusyk

+0

我的视觉工作室,不是在这篇文章(对不起我的“tarzan”英文Im智利) –