已知:当前数据的ID值,排序列,条件值
求:上一个下一个数据的代码,谢谢!
我也知道ID是不准确的,因为有了排序的原因,所以必须用到Row_number(),直接写SQL我也会,就是不知道EF查询怎么写。
这个问题又是个疑难杂症?在StackOverFlow都没看到理想的解决方法。
自己搞定,页面加个序号*pageindex就知道是第几个了。
大哥,你没看我的回复……我就是这样写的,悲催的赏了我10个豆子……
@UnDefault: 你这个EF是不支持的。
@happydaily: 额……EF不支持?不好意思了哈……前不久刚试了下,没在EF,不过也是用的lambada,可以用的...
@UnDefault: 你是不是没创建序列化类?linq貌似select出来要new 一个序列化的对象
@UnDefault: 你用的是List之类的对象是可以的,但EF不支持这个写法,它没法转为Sql。
@happydaily: 没搞懂你的意思……反正你解决了就好……
LINQ:OrderBy+First
你是要做分页吗?
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;
用行号,不过不是懒惰查询
from c in (from c in db.Project orderby c.Id select c).ToList()
select new {c,RowIndex=i++};
不支持select ((x,index)=>new )的写法。
@happydaily: ??
@Yu: entiy framework 不支持这个,不支持的还有takewhile,skipwhile
建议用当前记录的行号来完成上一个下一个功能。用ID不太准确
var myOrderField=(from d in db.table
select d.OrderField).Skip(当前行号).Take(1).FirstOrDefault
我也想知道当前行号,怎么求呢?
//当前记录的 排序字段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();
这个会有问题,where 字段 这么写只能支持Int,bool类型,如果是String得用String.compare对吧,这样写还要判断的
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);
这个问题我解决过,是在经过多重列排序后的列表页面,进入某条记录的编辑页面,然后在编辑页面有“上一条”、“下一条”的操作,记得当时分析了好久,思路是先根据Id找到当前记录信息,再根据排序信息和查询条件,构造出合适的order by 和 where语句,查询便可以找到相邻记录,你看看EF好像可以自己扩展的吧,按照我提供的思路扩展一下看行不,我当时还区分了空值或空字符串是排在前面还是排在后面,还是永远排在前面,还是永远排在后面这几种情况,并作了多种数据库的兼容处理。
求其中一个代码,谢谢。