Sütun türünün DateTime olduğunu düşünürsek bir LINQ sonucunu saatlerce SQL sorgusuna nasıl gruplandırabilirim?LINQ to SQL - Saat başına gruplandırma
11
A
cevap
23
Teknik saatler için bir çözüm (bağlam-az). Bu üretir
var query = myDC.Orders
.GroupBy(x => x.OrderDate.Hour)
.Select(g => new {
Hour = g.Key,
Amount = g.Sum(x => x.OrderAmount)
});
:
SELECT SUM([t1].[OrderAmount]) AS [Amount], [t1].[value] AS [Hour]
FROM (
SELECT DATEPART(Hour, [t0].[OrderDate]) AS [value], [t0].[OrderAmount]
FROM [dbo].[Orders] AS [t0]
) AS [t1]
GROUP BY [t1].[value]
İşte iş saatleri (bağlam-ful) için bir çözümdür. Bu üretir
DateTime zeroDate = new DateTime(2008, 1, 1);
var query = myDC.Orders
.GroupBy(x => System.Data.Linq.SqlClient.SqlMethods.DateDiffHour(zeroDate, x.OrderDate)
)
.Select(g => new { Hours = g.Key, Amount = g.Sum(x => x.OrderAmount) })
.Select(x => new { Hour = zeroDate.AddHours(x.Hours), Amount = x.Amount});
:
SELECT DATEADD(ms, (CONVERT(BigInt,(CONVERT(Float,[t2].[value2])) * 3600000)) % 86400000, DATEADD(day, (CONVERT(BigInt,(CONVERT(Float,[t2].[value2])) * 3600000))/86400000, @p1)) AS [Hour], [t2].[value] AS [Amount]
FROM (
SELECT SUM([t1].[OrderAmount]) AS [value], [t1].[value] AS [value2]
FROM (
SELECT DATEDIFF(Hour, @p0, [t0].[OrderDate]) AS [value], [t0].[OrderAmount]
FROM [dbo].[Orders] AS [t0]
) AS [t1]
GROUP BY [t1].[value]
) AS [t2]
Ugh - o Bigint/şamandıra/malzeme çirkin ve doğrulamak zor milisaniye. Bu üretir
var results = myDC.Orders
.GroupBy(x => System.Data.Linq.SqlClient.SqlMethods.DateDiffHour(zeroDate, x.OrderDate)
)
.Select(g => new { Hours = g.Key, Amount = g.Sum(x => x.OrderAmount) })
.ToList()
.Select(x => new { Hour = zeroDate.AddHours(x.Hours), Amount = x.Amount});
: Ben istemci tarafında geri eklenmesini yapmayı tercih ederim burada
SELECT SUM([t1].[OrderAmount]) AS [Amount], [t1].[value] AS [Hours]
FROM (
SELECT DATEDIFF(Hour, @p0, [t0].[OrderDate]) AS [value], [t0].[OrderAmount]
FROM [dbo].[Orders] AS [t0]
) AS [t1]
GROUP BY [t1].[value]
Ve contextful saat yapmanın üçüncü yoldur. Bu çok C# dostça, ancak veritabanında string mantığı var (yuck).
SELECT SUM([t1].[OrderAmount]) AS [Amount], [t1].[value] AS [Hour]
FROM (
SELECT CONVERT(DATETIME, (CONVERT(NCHAR(4), DATEPART(Year, [t0].[OrderDate])) + ('-' + (CONVERT(NCHAR(2), DATEPART(Month, [t0].[OrderDate])) + ('-' + CONVERT(NCHAR(2), DATEPART(Day, [t0].[OrderDate])))))) + (' ' + (CONVERT(NCHAR(2), DATEPART(Hour, [t0].[OrderDate])) + (':' + (CONVERT(NCHAR(2), @p0) + (':' + CONVERT(NCHAR(2), @p1)))))), 120) AS [value], [t0].[OrderAmount]
FROM [dbo].[Orders] AS [t0]
) AS [t1]
GROUP BY [t1].[value]
üretir
var query = myDC.Orders
.GroupBy(x => new DateTime(x.OrderDate.Year, x.OrderDate.Month, x.OrderDate.Day, x.OrderDate.Hour, 0, 0))
.Select(g => new { Hour = g.Key, Amount = g.Sum(x => x.OrderAmount) });
İlgili konular
- 1. Linq-To-Sql Object
- 2. Linq To-SQL
- 3. Linq to SQL (-)
- 4. Linq To SQL ve
- 5. LINQ To SQL Paging
- 6. Linq-to-SQL ToDictionary()
- 7. LINQ to SQL
- 8. Linq to SQL - sorgusu
- 9. Linq to SQL "beğenmediniz" operatörü
- 10. LINQ-To-SQL (IDENTITY INSERT)
- 11. LINQ to SQL kullanarak güncelleştirme
- 12. Linq to SQL: optimizasyonu seç
- 13. LINQ to SQL ForeignKeyReferenceAlreadyHasValueException error
- 14. linq to sql güncelleştirme standardı
- 15. LINQ to SQL dizgileri enler
- 16. Linq to sql: orderby çalışmıyor
- 17. LINQ to SQL - dize dizisi
- 18. LINQ to SQL Designer Bug
- 19. LINQ kullanarak saatte gruplandırma
- 20. System.InvalidOperationException: İşlem, bağlantıyla eşleşmiyor. linq to sql
- 21. LINQ-To-SQL, SQL Enjeksiyonlarını nasıl önler?
- 22. LINQ Gruplandırma Verileri İkili
- 23. Saat başına 24 saat içinde farklı durum SQL toplamı
- 24. Linq-To-SQL ile nasıl güncellenir?
- 25. LINQ-to-SQL sorguları ne zaman yürütülür?
- 26. Linq-to-Sql SubmitChanges alanları güncelleştirmiyor ... neden?
- 27. LINQ to SQL - Hayır Yöntem ekle
- 28. Linq-to-sql İçermez veya İçermez?
- 29. ADO.NET Veri Hizmetleri Linq-to-SQL ile
- 30. mySQL + LINQ to SQL in C#