首页新闻找找看学习计划

求EF查询 得到上一个下一个数据的代码

0
悬赏园豆:100 [已解决问题] 解决于 2014-03-19 08:29

已知:当前数据的ID值,排序列,条件值

求:上一个下一个数据的代码,谢谢!

问题补充:

我也知道ID是不准确的,因为有了排序的原因,所以必须用到Row_number(),直接写SQL我也会,就是不知道EF查询怎么写。

这个问题又是个疑难杂症?在StackOverFlow都没看到理想的解决方法。

happydaily的主页 happydaily | 小虾三级 | 园豆:581
提问于:2014-03-14 11:33
< >
分享
最佳答案
0

自己搞定,页面加个序号*pageindex就知道是第几个了。

happydaily | 小虾三级 |园豆:581 | 2014-03-19 08:27

大哥,你没看我的回复……我就是这样写的,悲催的赏了我10个豆子……

UnDefault | 园豆:212 (菜鸟二级) | 2014-04-01 14:57

@UnDefault: 你这个EF是不支持的。

happydaily | 园豆:581 (小虾三级) | 2014-04-01 16:24

@happydaily: 额……EF不支持?不好意思了哈……前不久刚试了下,没在EF,不过也是用的lambada,可以用的...

UnDefault | 园豆:212 (菜鸟二级) | 2014-04-02 10:18

@UnDefault: 你是不是没创建序列化类?linq貌似select出来要new 一个序列化的对象

UnDefault | 园豆:212 (菜鸟二级) | 2014-04-02 10:20

@UnDefault: 你用的是List之类的对象是可以的,但EF不支持这个写法,它没法转为Sql。

happydaily | 园豆:581 (小虾三级) | 2014-04-02 10:27

@happydaily: 没搞懂你的意思……反正你解决了就好……

UnDefault | 园豆:212 (菜鸟二级) | 2014-04-02 13:40
其他回答(8)
0

LINQ:OrderBy+First

收获园豆:5
滴答的雨 | 园豆:3690 (老鸟四级) | 2014-03-14 11:44
0

你是要做分页吗?

收获园豆:5
吴瑞祥 | 园豆:28675 (高人七级) | 2014-03-14 11:46
0

var myOrderField=(from d in db.table

      where Criteria and d.ID.equals(IDValue)

      select d.OrderField).FirstOrDefault

 

//下一个数据

var query=( from c in db.table

        order by c.OrderField

                  where c.OrderField>myOrderField

      select c).firstOrDefault;

      

收获园豆:30
爱编程的大叔 | 园豆:29784 (高人七级) | 2014-03-14 11:47
0

用行号,不过不是懒惰查询

from c in (from c in db.Project orderby c.Id select c).ToList()
select new {c,RowIndex=i++};

收获园豆:10
Yu | 园豆:12944 (专家六级) | 2014-03-14 13:36

不支持select ((x,index)=>new )的写法。

支持(0) 反对(0) happydaily | 园豆:581 (小虾三级) | 2014-03-14 16:06

@happydaily: ??

支持(0) 反对(0) Yu | 园豆:12944 (专家六级) | 2014-03-14 17:35

@Yu: entiy framework 不支持这个,不支持的还有takewhile,skipwhile

支持(0) 反对(0) happydaily | 园豆:581 (小虾三级) | 2014-03-14 17:54
0

建议用当前记录的行号来完成上一个下一个功能。用ID不太准确

var myOrderField=(from d in db.table

      select d.OrderField).Skip(当前行号).Take(1).FirstOrDefault

收获园豆:10
沧海一杰 | 园豆:28 (初学一级) | 2014-03-14 13:43

我也想知道当前行号,怎么求呢?

支持(0) 反对(0) happydaily | 园豆:581 (小虾三级) | 2014-03-14 16:02
0

//当前记录的 排序字段OrderFiled  的值 order1

var perQuery=db.Where(w=>w.OrderFiled<order1).OrderByDescending(o=>o.OrderFiled).FirstOrDefault();

var nexQuery=db.Where(w=>w.OrderFiled>order1).OrderBy(o=>o.OrderFiled).FirstOrDefault();

收获园豆:30
Qlin | 园豆:2403 (老鸟四级) | 2014-03-14 16:01

这个会有问题,where 字段 这么写只能支持Int,bool类型,如果是String得用String.compare对吧,这样写还要判断的

支持(0) 反对(0) happydaily | 园豆:581 (小虾三级) | 2014-03-14 16:05
-1

       int i = 0;
               var data = db.Orderby(c=>c.orderField).Select(c => new{c,i=i+1}).ToList();

     var nextdata = data.where(d=>d.i =  data.where(c=>c.value = value).select(c=>c.i) +1).select(o=>o.c);

收获园豆:10
UnDefault | 园豆:212 (菜鸟二级) | 2014-03-14 17:23
0

这个问题我解决过,是在经过多重列排序后的列表页面,进入某条记录的编辑页面,然后在编辑页面有“上一条”、“下一条”的操作,记得当时分析了好久,思路是先根据Id找到当前记录信息,再根据排序信息和查询条件,构造出合适的order by 和 where语句,查询便可以找到相邻记录,你看看EF好像可以自己扩展的吧,按照我提供的思路扩展一下看行不,我当时还区分了空值或空字符串是排在前面还是排在后面,还是永远排在前面,还是永远排在后面这几种情况,并作了多种数据库的兼容处理。

terry59599s | 园豆:202 (菜鸟二级) | 2014-03-15 00:23

求其中一个代码,谢谢。

支持(0) 反对(0) happydaily | 园豆:581 (小虾三级) | 2014-03-15 17:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册