LINQ-To-SQL行号大于

时间:2009-08-12 23:59:17

标签: c# linq-to-sql

如果我有一个Photo类型的对象和一个按特定顺序排序的结果集,有没有办法让我在结果集中获取当前Photo对象的位置。然后得到所有跟随它的对象?

4 个答案:

答案 0 :(得分:2)

你可以做这样的事情(效率不高):

var result =
  photos.Select((p, i) => new { Index = i, Photo = p })
  .SkipWhile(x => x.Photo != photo).Skip(1);

这将为您提供photo后的所有照片以及原始集合中的索引。

答案 1 :(得分:1)

如果您要对Id进行排序:

// gets the previous photo, or null if none:
var previousPhoto = db.Photos
    .Where(p => p.Id < currentPhotoId)
    .OrderByDescending(p => p.Id)
    .FirstOrDefault();

// gets the next photo, or null if none:
var nextPhoto = db.Photos
    .Where(p => p.Id > currentPhotoId)
    .OrderBy(p => p.Id)
    .FirstOrDefault();

如果您有自定义排序,则需要将OrderBy/OrderByDescending表达式替换为自定义排序。您还需要在Where()中使用相同的排序条件,才能获取当前照片之前或之后的照片。

答案 2 :(得分:0)

不确定我是否理解正确,但这可能有所帮助:

var result = photos.Skip(100); // 100 would be the position of current object.

// if you don't know the index of the current object:
// This won't work on LINQ to SQL directly, do it on a list or something.
var result = photos.SkipWhile(x => x != currentObject).Skip(1);

实际上,如果您正在处理数据库,则应该排序一些标识符(一组列)。如果你想在服务器端完成所有工作,你可以获取当前对象的属性,并专门为那些以你想要的排序顺序出现的对象过滤结果集。

答案 3 :(得分:0)

照片索引:

result.IndexOf(photo);

之后的项目:

result.SkipWhile((q, i) => i <= result.IndexOf(photo));