微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – Sequence不包含任何元素 – LINQ,MVC,Average

我遇到了这个错误.我看到原因是因为从数据的角度来看,有时返回的平均值是0.00.这个SQL查询工作正常,但这是因为它自动输入0.00.

LINQ抱怨,所以我尝试使用DefaultIfEmpty(),但它说它期待我的viewmodel.

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)

更新!
这是SQL查询做我需要VB做的事情.

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)

解决方法

问题是如果输入IEnumerable(Of T)没有任何元素,所有标量LINQ方法(Average,Max等等)都会抛出异常.它看起来像g.Where调用导致一个空集合导致异常.

您可能想要做的是编写一个处理空案例并返回认值的方法.

原文地址:https://www.jb51.cc/mssql/79358.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐