加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

vb.net – 什么是LINQ相当于SUM(当X = Y然后1 ELSE 0 END时)?

发布时间:2020-12-17 07:27:19 所属栏目:百科 来源:网络整理
导读:不确定这只是一个坏习惯,还是一种有效的做事方式,但对于跨越一堆表的大型复杂报表查询,我经常通过总结一个Case语句得到我的汇总统计数据. 例如: SELECT Contact.Name,SUM(CASE WHEN Order.Type = 'Special' THEN 1 ELSE 0 END) AS SpecialOrders,SUM(CASE W
不确定这只是一个坏习惯,还是一种有效的做事方式,但对于跨越一堆表的大型复杂报表查询,我经常通过总结一个Case语句得到我的汇总统计数据.

例如:

SELECT Contact.Name,SUM(CASE WHEN Order.Type = 'Special' THEN 1 ELSE 0 END) AS SpecialOrders,SUM(CASE WHEN Order.Type = 'Magic' THEN 1 ELSE 0 END) AS MagicOrders,FROM Contact
LEFT JOIN Order ON (Contact.ContactID = Order.ContactID)

我将如何在LINQ to SQL中执行此操作? (在vb.net中,但我猜任何.Net示例都可以)

Dim Orders = _
    From Order In DB.Orders
    Select New With {.Name = Contact.Name,.Special = If(Order.Type = "Special",1,0),.Magical = If(Order.Type = "Magical ",0)}

我需要总结.Special和.Magical值.

(实际上,查询跨越了几个由事件预订信息组成的表,并且是否对记录进行求和的决定取决于其中几个字段中的字段)

解决方法

var specialSum = DB.Orders.Sum (o => o.Type == "Special" ? 1 : 0)
var magicalSum = DB.Orders.Sum (o => o.Type == "Magical" ? 1 : 0)

要么:

var specialSum = DB.Orders.Count (o => o.Type == "Special")
var magicalSum = DB.Orders.Count (o => o.Type == "Magical")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读