【项目实战】--仅对 LINQ to Entities 中已排序的输入支持方法“Skip”。必须在调用“Skip”方法之前调用方法“OrderBy”

【前言】:

对LINQ自己之前仅仅是做项目维护的过程中有所了解,具体的也不太懂,在目前的一个项目开发中应用到了linq,这次是自己真真实实的去写,尽管刚开始的时候很不熟悉,在写的过程中对它的了解慢慢多了,看来项目实战对人的成长还是很有帮助的。

【问题描述】:

在进行分页查询的时候遇到如下问题——“仅对 LINQ to Entities 中已排序的输入支持方法“Skip”。必须在调用“Skip”方法之前调用方法“OrderBy” ”,到底是什么原因呢?

【原因分析】:

原因在于Linq默认查询出来的数据顺序是聚集索引的顺序,所以要加上排序操作。即用OrderBy或OrderByDescending即可。

【代码示例】:

 public object GetAlarmInfo(int PrjID, int VolunGroup, int Volun, string AlarmStyle, int DoStatus, int page, int rows)
        {
            Con_Database db = new Con_Database();
           
            var queryAll = (from a in db.AlarmData_BasicPhysiologicalIndexes
                            join b in db.Business_R_Project_Volunteer on a.VolunteerID equals b.VolunteerID
                            join c in db.Base_VolunteerGroup on b.VolunteerGroupID equals c.AutoID
                            join d in db.Business_VolunteerInfo on b.VolunteerID equals d.AutoID
                            select new { PrjID = a.PrjID,VolunteerID=a.VolunteerID, Name = d.Name,VolunteerGroupID=b.VolunteerGroupID, Gourp = c.Name, IndicatorCode = a.IndicatorCode, IndicatorValue = a.IndicatorValue, StartTime = a.StartTime, LowerLimit = a.LowerLimit, UpperLimit = a.UpperLimit, DoStatus=a.DoStatus }).Distinct();

            if (PrjID != 0)
            {
                queryAll = queryAll.Where(a => a.PrjID == PrjID);
            }
            if (Volun != 0)
            {
                queryAll = queryAll.Where(a => a.VolunteerID == Volun);
            } 
            if (VolunGroup!=0)
            {
                queryAll = queryAll.Where(a => a.VolunteerGroupID == VolunGroup);
            }
            if (AlarmStyle!="0")
            {
                queryAll = queryAll.Where(a =>a.IndicatorCode == AlarmStyle);
            }
            if (DoStatus!=2)
            {
                queryAll = queryAll.Where(a =>a.DoStatus == DoStatus);
            }

            Int32 iCount = queryAll.Count();
            queryAll = queryAll.OrderByDescending(m => m.VolunteerID).Skip((page - 1) * rows).Take(rows);


            var json = new
            {
                total = iCount,
                rows = queryAll.ToList()
            };
            return queryAll;
        }

【总结】:

在项目中不断的实践,从一点一滴的小问题入手,不断积累,站在巨人的肩膀上不断前行。小编的总结可能不是很详细,希望能给大家带来一些帮助。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值