Entity Framework: Efficacement regroupement par mois

J'ai fait un peu de recherche sur ce sujet, et le meilleur que j'ai trouvé pour l'instant est d'utiliser un Asenumerable sur l'ensemble du jeu de données, de sorte que le filtrage se produit dans linq to objects, plutôt que sur la DB. J'utilise la dernière EF.

Mon travail (mais très lent) 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)
            };

Cela me donne mois dans le format AAAA-MM, ainsi que le montant total et montant moyen. Cependant, il faut plusieurs minutes à chaque fois.

Mon autre solution est de faire une mise à jour de la requête en SQL j'ai donc un AAAAMM champ de groupe en mode natif, par. La modification de la DB n'est pas une solution facile, cependant toutes les suggestions seraient appréciées.

Le fil, j'ai trouvé le code ci-dessus idée (http://stackoverflow.com/questions/1059737/group-by-weeks-in-linq-to-entities) mentionne " en attente jusqu'à ce que .NET 4.0'. Est-il quelque chose récemment introduite qui aide dans cette situation?

InformationsquelleAutor Glinkot | 2012-03-27