2017-12-31 71 views
-1

Die Idee hier ist, alle Zutaten aus allen Rezepten zusammenzufassen. Das ist meine AbfrageSQL Query in linq to sql, Gruppe nach Problem

SELECT IngredientName,sum(Amount) as Amount,Unit 
FROM RecipeIngredients Join Ingredients ON RecipeIngredients.IngredientID = Ingredients.IngredientsID 
GROUP BY IngredientID,IngredientName,Unit 
ORDER BY IngredientName 

Es funktioniert super. Keine Probleme. Ich bin verwirrt mit der Linq zu SQL-Syntax. Das ist was ich bisher habe.

using (lDataContext db = new lDataContext()) 
     { 
      return (from ri in db.RecipeIngredients join i in db.Ingredients on ri.IngredientID equals i.IngredientsID 

        group new {ri,i} by new {i.IngredientsID,i.IngredientName,ri.Unit } 
        into table 
        select new { 
         Name = table.IngredientName 
         Unit = table.Unit 
         Amount = table.Sum(i.amount) } 
        ).ToList(); 
     } 

Kann jemand bitte mit meiner Syntax helfen?

+3

Haben Sie anhand von Beispielen nach Gruppen gesucht und die Dokumentation gelesen? Vertrauen Sie mir, das ist einfach Zeug und Sie werden mehr lernen, indem Sie dieses Zeug nachschlagen –

+0

wo ist die Dokumentation? –

+1

Komm, hier gibt es eine Suchfunktion für Beispiele, und es gibt Google für die Dokumentation. –

Antwort

0

Angenommen, Sie sind nicht LINQ to Entities verwenden, aber nur LINQ to SQL,

Für SQL LINQ zu übersetzen,

  1. Übersetzen Subselects als separate Variablen
  2. Übersetzen jede Klausel in LINQ-Klausel, um, Verlassen von monadischen Operatoren (DISTINCT, TOP usw.) als Funktionen, die auf die gesamte LINQ-Abfrage angewendet werden.
  3. Verwenden Sie Tabellenaliasnamen als Bereichsvariablen. Verwenden Sie Spaltenaliase als anonyme Feldnamen.
  4. Verwenden Sie anonyme Typen (new {}) für mehrere Spalten
  5. Left Join wird simuliert, indem eine Join-Variable verwendet und eine andere von der Join-Variablen gefolgt von .DefaultIfEmpty().
  6. Ersetzen Sie COALESCE durch den bedingten Operator und einen Null-Test.
  7. SELECT * muss durch Auswahl der Bereichsvariablen oder für Joins ersetzt werden, ein anonymes Objekt, das alle Bereichsvariablen enthält.
  8. SELECT-Felder müssen ersetzt werden, indem neues {...} ausgewählt wird, um ein anonymes Objekt mit allen gewünschten Feldern oder Ausdrücken zu erstellen.