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

news/2024/7/16 8:52:42

【前言】:

对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;
        }

【总结】:

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




http://www.niftyadmin.cn/n/4224755.html

相关文章

Unity射线检测的用法总结

RayCast 射线检测本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分享、心创新!助力快速理解 Unity…

转帖- 以后胆子大点。。。不然这就是后果

1  伊是隔壁班的美女。上大课的时候要到的手机号(我手机好像接不了电话了,  帮忙打下看看)某次约出来了,晚秋,夜晚,小树林边。美女说:我冷。俺说:咱一起跑跑,  跑跑…

Java ---对象的包装器与自动装箱以及Java128陷阱

1.定义&#xff1a; Integer类对应基本类型int&#xff0c;通常&#xff0c;这些类称为包装器。 2.种类&#xff1a; Interger,Long,Float,Double,Short,Byte,Character,Void,Boolean 3.应用&#xff1a; 假设定义一个整型数组列表。而<>中类型参数不允许是基本类型…

Jekyll使用教程笔记 五

目录 《Jekyll使用教程笔记 一&#xff1a;简介、快速开始、基本用法、目录结构》《Jekyll使用教程笔记 二&#xff1a;配置》《Jekyll使用教程笔记 三&#xff1a;Front Matter、写文章》《Jekyll使用教程笔记 四&#xff1a;创建页面、静态文件、变量》《Jekyll使用教程笔记 …

FindWindow用法

函数功能&#xff1a;该函数获得一个顶层窗口的句柄&#xff0c;该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。函数型&#xff1a;HWND FindWindow&#xff08;LPCTSTR IpClassName&#xff0c;LPCTSTR IpWindowName&#xff09;;参…

分布式搜索的面试题2

1、面试题 es写入数据的工作原理是什么啊&#xff1f;es查询数据的工作原理是什么啊&#xff1f; 2、面试官心理分析 问这个&#xff0c;其实面试官就是要看看你了解不了解es的一些基本原理&#xff0c;因为用es无非就是写入数据&#xff0c;搜索数据。你要是不明白你发起一个写…

hibernate nativeSql应用

HQL尽管容易使用&#xff0c;但是在一些复杂的数据操作上功能有限。特别是在实现复杂的报表统计与计算&#xff0c;以及多表连接查询上往往无能为力&#xff0c;这时可以使用SQL&#xff08;Native SQL&#xff09;实现HQL无法完成的任务。 使用Naive SQL可以返回object结果&a…

POJ2488 A Knight's Journey

题目&#xff1a;http://poj.org/problem?id2488 题目大意&#xff1a;可以从任意点开始&#xff0c;只要能走完棋盘所有点&#xff0c;并要求字典序最小&#xff0c;不可能的话就impossible&#xff1b; 思路&#xff1a;dfs回溯&#xff0c;因为字典序最小&#xff0c;如果可…