石家庄信息工程职业学院社团,温馨的社团气氛,完善的硬件设备,过硬的技术标准。

.NET,一个关于linq的问题

2015-09-18 23:00 作者: 来源: 本站 浏览: 我要评论 字号:

摘要: 已有一段sql,如下: select DATEPART(dayofyear,b.CreatedDate) as dt, count(case b.OrderStatus when 1 then a.OrderId else null end) as a,...

已有一段sql,如下:
select
DATEPART(dayofyear,b.CreatedDate) as dt,
count(case b.OrderStatus when 1 then a.OrderId else null end) as a,–下单
count(case b.OrderStatus when 2 then a.OrderId else null end) as b,–接单
count(case b.OrderStatus when 5 then a.OrderId else null end) as c,–完成
sum(case b.OrderStatus when 5 then a.OrderMoneyActual else 0 end) as d,–实际总交易额
sum(case b.OrderStatus when 5 then a.OrderMoneyDiscount else 0 end) as e–总优惠额
from OrderInfo(nolock) a
inner join OrderStatusRecord(nolock) b
on a.OrderId=b.OrderId
where b.OrderStatus in (1,2,5)
and DATEDIFF(day,b.CreatedDate,getdate()) <= 60
group by DATEPART(dayofyear,b.CreatedDate)

翻译成linq(lambda亦可)

 

 

 

int[] statusArr = { 1, 2, 5 };
var query = (db.OrderInfo.Join(db.OrderStatusRecord.Where(p => statusArr.Contains(p.OrderStatus) && p.CreatedDate.Date >= DateTime.Now.AddDays(-60).Date), a => a.OrderId, b => b.OrderId, (a, b) => new
            {
                dt0 = b.CreatedDate.DayOfYear,
                a0 = b.OrderStatus == 1 ? (int?)a.OrderId : null,
                b0 = b.OrderStatus == 2 ? (int?)a.OrderId : null,
                c0 = b.OrderStatus == 5 ? (int?)a.OrderId : null,
                d0 = b.OrderStatus == 5 ? a.OrderMoneyActual : 0,
                e0 = b.OrderStatus == 5 ? a.OrderMoneyDiscount : 0
            })).GroupBy(p => p.dt0).Select(p => new
            {
                dt = p.Key,
                a = p.Count(k => k.a0 != null),
                b = p.Count(k => k.b0 != null),
                c = p.Count(k => k.c0 != null),
                d = p.Sum(k => k.d0),
                e = p.Sum(k => k.e0)

发表评论

你必须 登录后 才能评论!

会员登录关闭

记住我 忘记密码

注册会员关闭

小提示: 您的密码会通过填写的"电子邮箱"发送给您.