2017-03-01 90 views
0

这工作:传递EF查询,查看

var model = 
    (from t in _db.Tickets 
    from p in _db.Cust 
    where t.Id == 5 && t.Id == p.cust_id 
    orderby t.Id descending 
    select new tks_custs 
    { 
     Tks = t, 
     Custs = p 
    }); 

但我想实现这样通过使用组:

var model = _db.Tickets 
    .Join(_db.Cust, 
     t => t.Id, 
     w => w.cust_id, 
     (t, w) => new { Tks = t, Custs = w }) 
    .Where(t => t.Tks.Id == 5).OrderByDescending(w => w.Tks.Id) 
    .GroupBy(t => t.Tks.Name).ToList(); 

我认为声明是目前:

@model IQueryable<test.ViewModels.tks_custs> 
+0

错误是。视图接受iqueryable,但数据库查询通过 –

+0

Pass ViewModel not Model .... – yash

回答

1

您应该像创建第一个查询一样创建VieModel对象(tks_custs)。现在您尝试传递数据库模型(实际上不是BD模型,但是匿名对象为IGrouping对象)。

应该是这样的:

var model = _db.Tickets 
      .Join(_db.Cust, 
       t => t.Id, 
       w => w.cust_id, 
       (t, w) => new { Tks = t, Custs = w }) 
      .Where(t => t.Tks.Id == 5).OrderByDescending(w => w.Tks.Id) 
      .GroupBy(t => t.Tks.Name).ToList() 
      .Select(x => new tks_custs //here you creating your ViewModel 
      { 
       Tks = x.FirstOrDefailt().Tks, 
       Custs = x.FirstOrDefailt().Custs 
      }); 

您可能会注意到FirstOrDefailt()。你需要它,因为在GroupBy之后,你可能有许多组中的实体。