2016-08-09 15 views
-1

Ich habe zwei Entitäten (EF 6) mit dem Namen Käufe und Pakete. Ich kann diesen beiden beitreten, aber nicht ganz sicher, wie ich die im angegebenen Kauf enthaltenen Pakete zähle. Ich habe diese SQL-Abfrage in LINQ konvertiert (Lambda-Ausdruck bevorzugt).SQL in Linq Lambda konvertieren

Danke

SELECT 
    Pur.*, 
    Pac.Price, 
    (SELECT COUNT(ID) FROM Packets WHERE PurchaseID = Pur.ID) AS PacketCount 
FROM 
    Purchases AS Pur 
INNER JOIN 
    Packets AS Pac 
ON 
    Pur.ID = Pac.PurchaseID 

HINWEIS: Ich überprüfte die beantwortet Q aber keiner von ihnen mein Problem anspricht.

+1

Es wäre hilfreich, wenn Sie die Beziehung zwischen den beiden Klassenobjekten einschließen könnten. Ist es eine zweiseitige Navigationseigenschaft? – Heberda

+3

Falsche Frage. Wenn die Entität 'Purchase' über eine' Packages' Relation mit der Entität 'Package' verknüpft ist, brauchen Sie nur' myPurcahe.Packages.Count() 'zu schreiben. Wenn Sie feststellen, Joins zwischen Entitäten schreiben, ist Ihr Domain-Modell wahrscheinlich falsch –

+0

Das ist, was ich dachte @ Panagiotis, ich fühle, ein Blick auf die Objekte würde helfen. – Heberda

Antwort

0

Ich bin kein Experte in LINQ (weit davon entfernt), aber ich habe etwas ähnliches getan. Sie sagen, Sie haben den Beitritt bereits gemacht. Wenn es nach dem Vorbild der ist:

var joinList = (from Item1 in Purchases 
          join Item2 in Packets 
          on Item1.Id equals Item2.PurchaseId 
          select new { Item1, Item2 }).ToList(); 

Dann können Sie gehen:

var subList = joinList.Where(j => j.Item1.Id == myId).Select(s => { new s.Item1, s.Item2.Price, Count = joinList.Where(j => j.Item1.Id == myId).Count() }).ToList(); 

Dies wird Ihnen eine Liste ähnlich dem Re-Cord von Ihrem SQL zurückgegeben. Beachten Sie, dass Sie alle Felder in Item1 (äquivalent zu Käufe. *) Ausbrechen müssen. Die Alternative ist, sie alle im Select (wie am Artikel2.Preis) zu benennen.

HTH