Tôi đang gặp phải lỗi này. Tôi thấy rằng lý do là bởi vì trung bình trở lại vào thời điểm là 0,00 mà từ một điểm dữ liệu là chính xác. Truy vấn SQL này hoạt động tốt, nhưng đó là bởi vì nó đặt trong 0,00 tự động.Trình tự không chứa các phần tử - LINQ, MVC, Trung bình
LINQ than phiền và vì vậy tôi đã thử sử dụng DefaultIfEmpty() nhưng nó cho biết nó đang chờ ViewModel của tôi.
Dim ticketCounts = From t In queue _
Where _
(t.StatusId = 2) And _
(t.CloseDate.Year = Convert.ToDateTime(DateTime.Now).Year) And _
(t.ResolutionDays > 0)
Group t By _
Column1 = CType(t.CloseDate.Month, Integer), _
Column2 = CType(t.CloseDate.ToString("MMMM"), String) _
Into g = Group _
Order By Column1 _
Select _
Id = Column1, _
Month = Column2, _
Critical = g.Where(Function(t) t.PriorityId = 1).DefaultIfEmpty().Average(Function(t) t.ResolutionDays), _
High = g.Where(Function(t) t.PriorityId = 2).DefaultIfEmpty().Average(Function(t) t.ResolutionDays), _
Normal = g.Where(Function(t) t.PriorityId = 3).DefaultIfEmpty().Average(Function(t) t.ResolutionDays), _
Low = g.Where(Function(t) t.PriorityId = 4).DefaultIfEmpty().Average(Function(t) t.ResolutionDays), _
Total = g.Where(Function(t) t.Id <> Nothing).DefaultIfEmpty().Average(Function(t) t.ResolutionDays)
CẬP NHẬT! Đây là truy vấn SQL làm điều tương tự tôi cần VB để làm.
SELECT
DATENAME(MONTH,t.CloseDate) AS 'Month',
AVG(CASE WHEN (t.PriorityId = 1) THEN CAST(t.ResolutionDays AS Decimal(18, 2)) ELSE 0 END) AS 'Critical',
AVG(CASE WHEN (t.PriorityId = 2) THEN CAST(t.ResolutionDays AS Decimal(18, 2)) ELSE 0 END) AS 'High',
AVG(CASE WHEN (t.PriorityId = 3) THEN CAST(t.ResolutionDays AS Decimal(18, 2)) ELSE 0 END) AS 'Normal',
AVG(CASE WHEN (t.PriorityId = 4) THEN CAST(t.ResolutionDays AS Decimal(18, 2)) ELSE 0 END) AS 'Low',
AVG(CAST(t.ResolutionDays AS Decimal(18, 2))) AS 'Monthly Average'
FROM
tblMaintenanceTicket t
WHERE
t.StatusId = 2
AND YEAR(t.CloseDate) = year(getdate())
GROUP BY
MONTH(t.CloseDate),
DATENAME(MONTH,t.CloseDate)
ORDER BY
MONTH(t.CloseDate)
Tôi đã cố gắng đó gợi ý một vài cách khác nhau, nhưng kiểu này mà có thể được hoàn thành nội tuyến? Giống như một điều kiện nội tuyến? Tôi biết rất rõ về LINQ lol. – Chuck
@Chúc tại sao bạn không thể sử dụng defaultifempty? Nó có nghĩa là cho loại công cụ – nawfal
Tôi đã không exacly chắc chắn nơi để đặt nó. Nếu tôi đặt nó ngay sau mệnh đề where như g.Where (Function (t) t.PriorityId = 4) .DefaultIfEmpty() mà nó không thể chuyển đổi thành ViewModelType của tôi. – Chuck