日期:2014-05-20 浏览次数:20856 次
var data1 = from p in db.数据表s where p.时间 > lasttime && p.时间 < DateTime.Now//将新导入的记录导出来。 orderby p.编号 ascending select p; total = data1.Count();//获取记录的条数 if (total > 0) { int i = 0, totalbyhour = 0; while (has) { var data = data1.Take(2); //skipp = skipp + 10; foreach (var one in data) { while (!String.Equals(one.时间.ToString("MM/dd/yyyy/HH"), lasttime.ToString("MM/dd/yyyy/HH")))//不为同一时间段时,将上个时间段统计的数据写入库中。 { string temp = lasttime.ToString("MM/dd/yyyy/HH"); dr.InsertRecordByTime(yinshua, huanm, Convert.ToDateTime(temp)); lasttime = lasttime.AddHours(1); yinshua = 0; huanm = 0; totalbyhour = 0; } totalbyhour++; //为同一时间段时,对相应的参数累加。 if (one.温度2 > 30 && one.线速度 > 180) yinshua++; i++;//计数器,记录已经处理过的数据条数。 if (i == total)//将最后一数据写入数据库,下次统计时。利用其时间等参数。 { dc.UpdateCalculate(one.时间, yinshua, huanm); has = false; } } }
var data1 = (from p in db.数据表s where p.时间 > lasttime && p.时间 < DateTime.Now orderby p.编号 ascending select p).Skip((PageSize -1)* PageSize).Take(PageSize);
------解决方案--------------------
data1.Count(); 生成 select count(*) 的sql文,速度应该是很快的。要不然总页数没法算了。
问题是你这里还是每一条数据都要处理,分不分页意义不大啊。
------解决方案--------------------
count() 是非延迟查询操作符
会将DB中数据读入内存
------解决方案--------------------
看我帖子后半段的Skip(...).Take(...)
看贴要看全啊.
1、 total = data1.Count();//获取记录的条数 //执行一条 select count(*) as value from ...这条语句,其它数据并没有加载到内存。 2、 var data = data1.Take(2); foreach (var one in data) //使用时 执行查询 //第1次和 第2次 生成的sql语句一样: select top 2 * from ....。都是从数据库查询,不是从内存中 //怎么叫 跳过1200条, 注意你的 orderby p.编号 ascending 倒序,再取2条。