select items/rows 某Id后

select items/rows after a certain Id

我有一个项目列表(linq to sql),可以按各种属性排序,不仅仅是 Id asc/desc

如果列表仅由 Id 排序, 我可以打电话给 list.Where(o => o.Id > 123).Take(10)

是否有任何允许的 linq methods/functionality?

Take 10 items after id with value = 123

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);