Làm thế nào tôi có thể nhóm kết quả của truy vấn LINQ to SQL theo giờ xem xét rằng kiểu cột là DateTime?LINQ to SQL - Nhóm theo giờ
11
A
Trả lời
23
Đây là giải pháp cho giờ kỹ thuật (ít bối cảnh).
var query = myDC.Orders
.GroupBy(x => x.OrderDate.Hour)
.Select(g => new {
Hour = g.Key,
Amount = g.Sum(x => x.OrderAmount)
});
nào tạo này:
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]
Dưới đây là một giải pháp cho giờ làm việc (context-ful).
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});
nào tạo này:
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 - đó bigint/float/vài phần nghìn giây thứ là xấu xí và khó xác minh. Tôi thích làm việc bổ sung trở lại trên các mặt hàng:
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});
nào tạo này:
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]
Và đây là cách thứ ba làm những giờ contextful. Cái này rất thân thiện, nhưng có chuỗi logic trong cơ sở dữ liệu (yuck).
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) });
nào tạo
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]
Các vấn đề liên quan
- 1. LINQ to SQL: cách tổng hợp không có nhóm theo?
- 2. LINQ to SQL nhóm theo và tổng số
- 3. LINQ to Entities nhóm theo tuần số
- 4. LINQ to SQL hoặc LINQ to DataSet?
- 5. Chuyển đổi nhóm SQL đơn giản thành LINQ to SQL
- 6. NET LINQ to nhóm tổ chức theo ngày (ngày)
- 7. LINQ TO Số liệu: Nhiều nhóm theo bảng dữ liệu
- 8. LINQ-to-SQL và sự kỳ lạ ngày giờ
- 9. Nhóm máy chủ SQL theo số giờ trên mỗi giờ?
- 10. LINQ to SQL .Sum() mà không cần nhóm ... vào
- 11. LINQ to SQL Left Join, Trình tự, Nhóm By Đếm
- 12. Nhóm của Tuần năm (Tuần số) trong LINQ to SQL
- 13. Làm thế nào để bạn nhóm theo nhiều cột trong LINQ TO SQL?
- 14. LINQ: Nhóm theo tháng và năm trong trường ngày giờ
- 15. SQL to LINQ Tool
- 16. LINQ - Nhóm theo nhiều bảng
- 17. LINQ to SQL và có
- 18. LINQ to batch sql xóa
- 19. Nhóm MySQL theo giờ
- 20. T-SQL IsNumeric() và LINQ-to-SQL
- 21. LINQ to SQL trên Mono?
- 22. NHibernate vs LINQ to SQL
- 23. LINQ to SQL vs ADO.Net
- 24. LINQ-to-sql orderby ThenBy
- 25. LINQ to SQL Decimal Parameter
- 26. LINQ to SQL cho Oracle.ODP
- 27. NOLOCK với LINQ to SQL
- 28. LINQ to SQL nvarchar problem
- 29. LINQ to SQL tạo bảng
- 30. LINQ to SQL nhiều DataContext-s