2012-03-29 18 views
5

Próbuję zdefiniować standardowy sposób grupowania według roku, miesiąca, dnia, godziny, itd ...Entity Framework. Grupa SQL Do grupy EF Do

Odczytując niektóre dokumenty SQL wydaje się najbardziej skuteczny sposób byłoby użyć:

GROUP BY dateadd(month, datediff(month, 0, CreatedDate), 0) 

Uwaga "miesiąc", "rok", ...

potem próbował replikować to za pomocą:

.GroupBy(x => SqlFunctions.DateAdd("month", SqlFunctions.DateDiff("month", 0, x.Created), 0)) 

.GroupBy(x => EntityFunctions.AddMonths(EntityFunctions.DiffMonths(0, x.Created))) 

Jednak oba wyrażenia nie udało się skompilować ...

I nie jestem pewien, czy to jest sposób, aby to zrobić?

Jak poprawnie replikować tę linię kodu SQL w EF?

Odpowiedz

5

Nie rozumiem Dlaczego chcesz użyć standardowego sql, aby to zrobić w jakikolwiek sposób, jednak można to zrobić łatwo za pomocą LINQ i będzie to bardziej standard, grupowanie według anonimowego typu, na przykład tego :

.GroupBy(x => new 
       { 
        month = x.CreatedDate.Month, 
        year = x.CreatedDate.Year, 
        ... 
       }); 
+0

Tak, mam to działa. Ale jeśli nie mylę się używając czegoś, co napisałem, ma lepszą wydajność, nie? Czytałem następujące: http://weblogs.sqlteam.com/jeffs/archive/2007/09/10/group-by-month-sql.aspx ... –

+0

W ten sposób próbowałem znaleźć sposób, aby replikuj ten kod SQL za pomocą EntityFunctions ... I jednocześnie twórz standardowy sposób grupowania według lat, miesięcy, dni, godzin, ... Po prostu muszę zmienić AddYears na AddMonths, aby ... –

+2

Nie ma żadnej korzyści z wydajności. Post, do którego połączyłeś, po prostu stwierdza, że ​​ułatwia on pracę z Sql. Nie widzę tak dużej korzyści z tego w Entity Framework. .NET nie ma takich samych ograniczeń jak Sql. – cadrell0

Powiązane problemy