2012-03-29 20 views
5

ben vs saat, gündüz, ay, yıl grubuna standart bir yol tanımlamak çalışıyorum By EF Grubuna SQL Grubu tarafından ... Varlık Çerçevesi. en etkili yolu görünüyor bazı SQL belgeleri okuyarak

kullanmak olacaktır:

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

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

:

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

Not "ay", "yıl", ...

sonra kullanarak bu çoğaltmak için çalıştı Ancak, her iki ifade ...

derlemek için başarısız Ve bu Bunu yapmanın yolu olup olmadığından emin değilim?

nasıl doğru EF SQL kod satırı çoğaltabilir?

cevap

5

Anlayamıyorum Neden standart sql'yi herhangi bir şekilde yapmak için kullanmak istersiniz, ancak bu LINQ kullanılarak kolayca yapılabilir ve bu gibi bir anonim türe göre gruplandırılması daha standart olacaktır. :

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

Evet, çalışma olduğunu var. Ama yayınladığım gibi bir şey kullanamazsam daha iyi bir performansa sahip olurum, değil mi? http://weblogs.sqlteam.com/jeffs/archive/2007/09/10/group-by-month-sql.aspx ... –

+0

Bu benim için bir yol bulmaya çalışıyordu yoludur: Aşağıdaki okuyordum EntityFunctions kullanarak SQL kodu çoğaltmak ... Ve aynı zamanda, yıllara, aylara, günlere, saatlere göre gruplamak için standart bir yol yarat ... Sadece AddYears'ı AddMonths'a değiştirmem gerekecek ... –

+2

Herhangi bir performans avantajı yoktur. Bağlandığınız gönderi, Sql'de çalışmayı daha kolay hale getirdiğini belirtiyor. Varlık Çerçevesi ile bu şekilde böyle bir yararı olduğunu göremiyorum. .NET, Sql ile aynı sınırlamalara sahip değildir. – cadrell0