2015-08-29 157 views
2

我有一个实体框架查询是谁将结果组合在一起,我想将其传递给查看,但我无法将其转换为正确的观看模型! (我要显示的结果视图中的网格)将EF DBquery强制转换为Viewmodel - 无法强制转换类型为'System.Data.Entity.Infrastructure.DbQuery的对象

如果我用这个投

viewModel.Groupeds = (IEnumerable<Grouped>) result; 

我得到这些错误 无法转换类型System.Data.Entity.Infrastructure的”对象。 DbQuery 1[<>f__AnonymousType4 2 [System.Nullable`1 [System.Int32],System.Int32]]'改为类型

我该如何施放它?

public ActionResult Show(int? id) 
    { 
     IEnumerable<dynamic> result = db.StatData 
      .GroupBy(k => new { k.QuestId, k.OptionId }) 
      .Select(c => new 
      { 
       OptionId = c.Select(q => q.OptionId).FirstOrDefault(), 
       Counted = c.Select(q => q.id).Count(), 
      }); 

      var viewModel = new StatsView(); 
      viewModel.Groupeds = (IEnumerable<Grouped>) result; 
    return View(viewModel); 
} 

public class StatsView 
{ 
    public IEnumerable<Grouped> Groupeds { get; set; } 
} 


public partial class Grouped 
{ 
    public Nullable<int> Counted { get; set; } 
    public Nullable<int> OptionId { get; set; } 
} 

回答

2

的代码创建匿名类型的IEnumerable,你应该创建的Grouped结果IEnumerable。请注意,尽管您创建的匿名类型和Grouped具有相同的属性,但它们是不同的类型,并且不能将它们转换为对方。

public ActionResult Show(int? id) 
{ 
    //defining result as var is sufficient 
    var result = db.StatData 
     .GroupBy(k => new { k.QuestId, k.OptionId }) 
     .Select(c => new Grouped//<<-here 
     { 
      OptionId = c.Select(q => q.OptionId).FirstOrDefault(), 
      Counted = c.Select(q => q.id).Count(), 
     }).ToList();//commit the query 
     var viewModel = new StatsView(); 
     viewModel.Groupeds = result;//No need for casting 
    return View(viewModel); 
} 

最好是把它发送到视图中,因为如果上下文,视图生成之前,它会导致错误之前提交查询(即由ToList())。

+0

我不能编译它,如果我改变,得到错误 不能隐式转换类型'System.Collections.Generic.List <<匿名类型:int? Optionid,int Counted >>' to'System.Collections.Generic.IEnumerable '。存在明确的转换(你是否缺少一个转换?) – user4144972

+0

你改变了吗?。选择(c =>新分组// << - 这里是你的代码的这部分? –

+0

它的工作原理..很抱歉,我错过了它! – user4144972

相关问题