使用LINQ排序分页日期遇到NULL值的处理

1 根据条件来选择排序对象

因为涉及到联查对象的属性排序,所以不能直接根据条件排序分页

比如:

        public static IQueryable<T> ToPage<T>(IQueryable<T> allItems, int pageIndex, int pageSize)
        {
            if (pageIndex < 1)
                pageIndex = 1;
            var itemIndex = (pageIndex - 1) * pageSize;

            var pageOfItems = allItems.Skip(itemIndex).Take(pageSize);
            return pageOfItems;
        }
                MQuery = MQuery.OrderByDescending(o => o.ID);
                 MQuery = DbContextHelp.ToPage<ticket>(MQuery, pageIndex, pageSize);         
                 var List = (from ticket in MQuery
                            join TicketLose in dbContext.TicketLose
                            on ticket.ID equals TicketLose.ticketid
                            into TicketLosetemp
                            select new  
                            {
                                name = ticket.name,
                                activationTime = act.ActivationTime,
                            }).ToList();

这样是在结果集出来之前排序,是无法对联查表的属性排序。      

改为这样

             
             var orderQuery= (from ticket in MQuery
                            join TicketLose in dbContext.TicketLose
                            on ticket.ID equals TicketLose.ticketid
                            into TicketLosetemp
                            select new  
                            {
                                name = ticket.name,
                                activationTime = act.ActivationTime,
                            });       
var reList = orderQuery.Select(o => new ViewTicketDetail()
                    {
                        name = o.name,
                        activationTime = o.activationTime,
                    }).OrderBy(o => o.ActivationTime).Skip(pageIndex).Take(pageSize).ToList();

能对结果集的属性排序

2 根据条件选择排序字段


                if (isuse==0)
                {
                
                    var reList = orderQuery.OrderBy(o => o.loseTime).Select(o => new ViewTicketDetail()
                    {
                        name = o.name,
                       loseTime = o.loseTime==maxDataTmie?null:o.loseTime,
                    }).Skip(pageIndex).Take(pageSize).ToList();
                }
                if (isuse == 1)
                {
    
                  var reList = orderQuery.OrderBy(o => o.activationTime).Select(o => new ViewTicketDetail()
                    {
                        name = o.name,
                       loseTime = o.loseTime==maxDataTmie?null:o.loseTime,
                    }).Skip(pageIndex).Take(pageSize).ToList();


                }

2 可以在排序时设置默认值

OrderBy(o => o.loseTime.GetValueOrDefault(DateTime.MaxValue)).Skip(pageIndex).Take(pageSize).ToList();

3 合计金额报错解决

.Sum(od => (decimal?)od.Quantity).GetValueOrDefault();

4 排序不能设置默认值,但是查询可以设置默认值,改写

            var orderQuery = (from ticket in MQuery
                            join wxpr in dbContext.wx_shop_product
                            on ticket.specialGoods equals wxpr.id
                            join Activation in dbContext.TicketActivation
                            on ticket.ID equals Activation.ticketid
                            into Activationtemp
                            from act in Activationtemp.DefaultIfEmpty()
                            join TicketLose in dbContext.TicketLose
                            on ticket.ID equals TicketLose.ticketid
                            into TicketLosetemp
                            from Lose in TicketLosetemp.DefaultIfEmpty()
                            join code in dbContext.msd_code.Where(w => w.wordsCode == "msd_useticket_isuse")
                            on ticket.isuse equals code.numberCode
                            select new
                            {
                                name = ticket.name,
                                activationTime = act.ActivationTime,
                                loseTime = Lose.loseTime==null ? maxDataTmie: Lose.loseTime,
                                isuse = code.codeName

                  var reList = orderQuery.Select(o => new ViewTicketDetail()
                    {
                        name = o.name,
                        activationTime = o.activationTime,
                       loseTime = o.loseTime,
                       isuse = o.isuse
                    }).OrderBy(o => o.loseTime).Skip(pageIndex).Take(pageSize).ToList();
                    returnModels = new PagedList2<ViewTicketDetail>(reList, pageIndex, pageIndex, totalItemCount);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值