2017-10-28 564 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.'下,但這的確是我添加下面的代碼片段的原因 - 這更好地解釋了您在那裏做了什麼 –

相關問題