2017-10-28 1 views
-2

Diese Abfrage funktioniert, aber ich versuche, die beiden Schritte in einer Abfrage zu kombinieren.Noch eine andere "Ein Abfragekörper muss mit einer Select-Klausel oder einer Gruppenklausel enden"

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

Wenn ich versuche, die zwei Abfragen zu kombinieren, um die folgende Abfrage verwendet es gibt mir die Fehlermeldung „Eine Abfrage Körper mit einer select-Klausel oder eine Gruppenklausel enden muss“.

Ich denke, ich muss etwas hinzufügen, aber ich kann nicht herausfinden, was. Kann mir bitte jemand helfen?

Antwort

2

Ihre Abfrage muss eine select Klausel enthalten. Die .Where(...).GroupBy(...).Select(...) sind nur auf der db.GetTable<Users>(). Etwas wie:

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 */}; 

Aber ich denke, Sie suchen etwas wie:

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

Danke, das funktioniert. Deine zweite Version hat mir gegeben, was ich wollte. In der ersten (Punktnotation) kann ich nicht herausfinden, wie man den Count() bekommt, aber die zweite Version ist leichter zu verstehen. – Gerry

+0

@Gerry - die Zählung wird unter dem 'u.' sein, aber deshalb habe ich das untere Snippet hinzugefügt - was besser erklärt, was Sie dort tun –

Verwandte Themen