Ich bin immer noch ziemlich grün auf Linq, wenn es um Projektion und Gruppierung geht. Wie kann ich die Ergebnisse der folgenden SQL-Abfrage mit linq erhalten? Oder gibt es einen besseren Ansatz zum Abrufen dieser Abfrage neben linq? Ich benutze Entity Framework und ich weiß, ich kann nur hart die SQL-Code, aber würde es vorziehen, das nicht zu tun, wenn es einen besseren Weg gibt.Wie summiere ich eine Spalte in einer untergeordneten Tabelle einer projizierten Linq-Abfrage?
SELECT j.JobId, j.Name, j.OrderId, j.ShipDate,
st.ShipTypeId, sum(p.DeliveryCnt * p.Quantity) AS 'DeliveryCnt'
FROM Jobs j
JOIN ShipTo st ON j.JobId = st.JobId
JOIN DesignSets ds ON j.JobId = ds.JobId
JOIN DesignSetAreas dsa ON ds.DesignSetId = dsa.DesignSetId
JOIN Products p ON dsa.DesignSetAreaId = p.DesignSetAreaId
WHERE j.ShipDate >= '11/13/2016' AND j.ShipDate <= '11/26/2016'
GROUP BY j.JobId, j.Name, j.OrderId, j.ShipDate, st.ShipTypeId
Der Code unten ist, was ich bisher habe, aber ich bin mir nicht sicher, wo oder wie ich würde die Gruppierung tun, oder, wenn dies überhaupt möglich.
var shipList = from j in db.Jobs
join st in db.ShipTo on j.JobId equals st.JobId
join ds in db.DesignSets on j.JobId equals ds.JobId
join p in db.Products on ds.DesignSetId equals p.DesignSetId
where j.ShipDate >= startDate && j.ShipDate <= endDate
select new ShipScheduleViewModel
{
JobId = j.JobId,
Name = j.OrderId + " " + j.Name,
ShipDay = ((DateTime)j.ShipDate).Day,
ShipVia = st.ShipTypeId,
Count = p.DeliveryCnt * p.Quantity
};
Zunächst empfehle ich, dass Sie die Verwendung von Navigationseigenschaften umfassen über https://coding.abel.nu/2012/06/dont-use-linqs-join-navigate/ verbindet – juharr
Sie über die Navigation recht Eigenschaften. Sie sind eine viel sauberere Art zu programmieren. Danke für diesen Link, um mich daran zu erinnern, dass es einen besseren Weg gibt. – Kyle