Ein Unterschied, auf den ich stoße, sind Unterschiede in der Gruppierung.
Wenn Sie in linq Objekte gruppieren, erhalten Sie ein hierarchisch aufgebautes Ergebnis (Schlüssel, mit untergeordneten Objekten).
Wenn Sie in SQL gruppieren, erhalten Sie nur Schlüssel und Aggregate.
Wenn Sie in linq to sql gruppieren und nach den untergeordneten Objekten fragen (mehr als Aggregate), wird linq to sql jede Gruppe mit dem Schlüssel erneut abfragen, um diese untergeordneten Objekte zu erhalten. Wenn Sie Tausende von Gruppen haben, kann das Tausende von Roundtrips bedeuten.
//this is ok
var results = db.Orders
.GroupBy( o => o.CustomerID )
.Select(g => new
{
CustomerId = g.Key,
OrderCount = g.Count()
});
//this could be a lot of round trips.
var results = db.Orders
.GroupBy( o => o.CustomerID )
.Select(g => new
{
CustomerId = g.Key,
OrderIds = g.Select(o => o.OrderId)
});
// this is ok
// used ToList to separate linqtosql work from linqtoObject work
var results = db.Orders
.Select(o => new {o.CustomerId, o.OrderId})
.ToList()
.GroupBy(o => o.CustomerId)
.Select(g => new
{
CustomerId = g.Key,
OrderIds = g.Select(o => o.OrderId)
});