2017-10-28 100 views
-2

该查询确实有效,但我试图将两个步骤合并为一个查询。又一个“查询正文必须以select子句或group子句结尾”

var query1 = from b in db.GetTable<Boats>() 
      from o in db.GetTable<Offices>() 
      from u in db.GetTable<Users>() 
      .Where 
      (u => 
       u.UserId == b.Handling_broker && 
       o.Office == b.Handling_office && 
       b.Status == 2 && 
       officesToInclude.Contains(b.Handling_office) 
      ) 
      select new 
      { 
       hOffice = o.Name, 
       bName = u.Name 
      }; 

var query2 = query1.GroupBy(t => new { office = t.hOffice, name = t.bName }) 
      .Select(g => new { Office = g.Key.office, Name = g.Key.name, Count = g.Count() }); 

如果我尝试使用下面的查询它给我的错误“查询体必须与SELECT子句或group子句结束”合并这两个查询。

var query1 = from b in db.GetTable<Boats>() 
      from o in db.GetTable<Offices>() 
      from u in db.GetTable<Users>() 
      .Where 
      (u => 
       u.UserId == b.Handling_broker && 
       o.Office == b.Handling_office && 
       b.Status == 2 && 
       officesToInclude.Contains(b.Handling_office) 
      ) 
      .GroupBy(t => new { office = t.Office, name = t.Name }) 
      .Select(g => new { Office = g.Key.office, Name = g.Key.name, Count = g.Count() }); 

我想我必须添加一个选择的东西,但我不知道是什么。 任何人都可以请帮忙吗?

回答

2

您的查询必须包含select子句。 .Where(...).GroupBy(...).Select(...)只在db.GetTable<Users>()上。喜欢的东西:

var query1 = from b in db.GetTable<Boats>() 
      from o in db.GetTable<Offices>() 
      from u in db.GetTable<Users>().Where(u => u.UserId == b.Handling_broker && 
                 o.Office == b.Handling_office && 
                 b.Status == 2 && 
                 officesToInclude.Contains(b.Handling_office)) 
         .GroupBy(t => new { office = t.Office, name = t.Name }) 
         .Select(g => new { Office = g.Key.office, Name = g.Key.name, Count = g.Count() }) 
      select new { /* Desired properties */}; 

但我认为你正在寻找的东西,如:

var result = from b in db.GetTable<Boats>() 
      from o in db.GetTable<Offices>() 
      from u in db.GetTable<Users>() 
      where u.UserId == b.Handling_broker && 
       o.Office == b.Handling_office && 
       b.Status == 2 && 
       officesToInclude.Contains(b.Handling_office)) 
      group 1 by new { t.Office, t.Name } into g 
      select new { Office = g.Key.Office, Name = g.Key.Name, Count = g.Count() }; 
+0

谢谢,这工作。你的第二个版本给了我我想要的东西。在第一个(点符号)中,我无法弄清楚如何获得Count(),但第二个版本更易于理解。 – Gerry

+0

@Gerry - 计数将在'u.'下,但这的确是我添加下面的代码片段的原因 - 这更好地解释了您在那里做了什么 –

相关问题