如果我有一个Photo类型的对象和一个按特定顺序排序的结果集,有没有办法让我在结果集中获取当前Photo对象的位置。然后得到所有跟随它的对象?
答案 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));