如何解决在某个 Id 之后选择项目/行
我有一个项目列表(linq 到 sql),可以按各种属性排序,不仅仅是按 Id asc/desc
如果列表仅按 Id
排序,
我可以打电话给list.Where(o => o.Id > 123).Take(10)
是否有任何允许的 linq 方法/功能?
取值为 123 的 id 后的 10 项
解决方法
SQL 没有行排序的概念,因此您不能在 SQL 的特定行之后请求。但是,LINQ to Objects 这样做,因此您可以使用它:
如果 list
是根据您的查询创建的 List<T>
,只需使用 SkipWhile
:
list.SkipWhile(o => o.Id != 123).Skip(1).Take(10)
如果 list
是一个 LINQ to SQL 查询,那么首先使用 AsEnumerable
但意识到这会将整个查询带到客户端:
list.AsEnumerable().SkipWhile(o => i.Id != 123).Skip(1).Take(10)
如果您知道排序并可以对其进行测试,则可以过滤并将返回给客户端的数据量减少 1。计算给定 Id
的排序的最大重复数和 2。仅返回按所需顺序大于或等于所需 Id
的排序值的记录:
var maxdup = list.GroupBy(o => o.someProp).Select(og => og.Count()).Max();
var ans = list.Orderby(o => o.someProp)
.Where(o => o.someProp >= list.Where(o2 => o2.Id == 123).First().someProp)
.Take(10+maxdup)
.AsEnumerable()
.SkipWhile(o => o.Id != 123).Skip(1)
.Take(10);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。