【项目实战】--仅对 LINQ to Entities 中已排序的输入支持方法“Skip”。必须在调用“Skip”方法之前调用方法“OrderBy”
2017-07-13 20:06
525 查看
【前言】:
对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; }
【总结】:
在项目中不断的实践,从一点一滴的小问题入手,不断积累,站在巨人的肩膀上不断前行。小编的总结可能不是很详细,希望能给大家带来一些帮助。相关文章推荐
- 其他信息: 仅对 LINQ to Entities 中已排序的输入支持方法“Skip”。必须在调用“Skip”方法之前调用方法“OrderBy”。
- LINQ to Entities统一数据存取方法解析(非原创)
- dhl:报错:LINQ to Entities 不支持指定的类型成员“Date”
- Linq To Entities中的动态排序
- LINQ to Entities 不识别方法“System.String ToString(System.String)”因此该方法无法转换为存储表达式
- LINQ to Entities 不识别方法
- LINQ to Entities统一数据存取方法解析(非原创)
- linq to entity 分页方法不支持LastOrDefault等操作的处理办法
- Linq排序、分组、模糊查询、调用外部方法、直接执行SQL语句、事务、修改数据
- Entity Framework 4 in Action读书笔记——第四章:使用LINQ to Entities查询:排序和连接数据
- LINQ to Entities 基于方法的查询语法
- LinqToEntities 更新、删除 的小技巧 Attach 和 域操作自定义方法
- LINQ TO SQL项目实战---用户登录篇
- Lambda表达式--使用方法语法的复杂查询: join (在单个 LINQ to Entities 查询中的两个结构上不兼容的初始化过程中出现类型)
- Linq to Entities调用存储过程取不到OUTPUT变量值
- 如何:在 Visual Studio 中创建 LINQ to Entities 项目
- linq to sql + coolite 实战练习项目 手记
- LINQ to Entities,基于方法查询,查询表达式语法
- LINQ to Entities 基于方法的查询语法
- LINQ to Entities查询的简便方法就是使用函数