Entity Framework: Effizient Gruppierung nach Monat

Ich habe getan, ein wenig Forschung auf dies, und die beste, die ich bisher gefunden habe, ist die Verwendung eines Asenumerable auf das gesamte dataset, so dass die Filterung erfolgt in linq to objects, anstatt auf die DB. Ich bin mit der neuesten EF.

Meine Arbeit (aber sehr langsam) code:

        var trendData = 
            from d in ExpenseItemsViewableDirect.AsEnumerable()
            group d by new {Period = d.Er_Approved_Date.Year.ToString() + "-" + d.Er_Approved_Date.Month.ToString("00") } into g
            select new
            {
                Period = g.Key.Period,
                Total = g.Sum(x => x.Item_Amount),
                AveragePerTrans = Math.Round(g.Average(x => x.Item_Amount),2)
            };

Dies gibt mir die Monate im format JJJJ-MM, zusammen mit dem Gesamtbetrag und Durchschnittlicher Betrag. Allerdings dauert es mehrere Minuten jedes mal.

Meine andere Problemumgehung ist, zu tun, eine update-Abfrage in SQL, also habe ich eine YYYYMM Feld Gruppe nativ durch. Ändern der DB ist nicht leicht zu beheben, aber so irgendwelche Vorschläge würden geschätzt.

Den thread fand ich den oben genannten code-Idee (http://stackoverflow.com/questions/1059737/group-by-weeks-in-linq-to-entities) erwähnt 'warten, bis .NET 4.0'. Ist es etwas, das vor kurzem eingeführt, dass hilft in dieser situation?

InformationsquelleAutor Glinkot | 2012-03-27
Schreibe einen Kommentar