【前言】:
对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;
}
【总结】:
在项目中不断的实践,从一点一滴的小问题入手,不断积累,站在巨人的肩膀上不断前行。小编的总结可能不是很详细,希望能给大家带来一些帮助。