[英]LINQ-To-SQL row number greater than
如果我有一個Photo類型的對象和一個按特定順序排序的結果集,是否有辦法讓我獲取當前Photo對象在結果集中的位置。 然后得到所有跟隨它的對象?
您可以執行以下操作(效率不高):
var result =
photos.Select((p, i) => new { Index = i, Photo = p })
.SkipWhile(x => x.Photo != photo).Skip(1);
這會給你以下所有照片photo
與他們原來的集合中的索引相結合。
如果您要根據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()
使用相同的排序條件,以僅獲取當前照片之前或之后的那些照片。
不知道我是否理解正確,但這可能會有所幫助:
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);
實際上,如果您正在處理數據庫,則應該有一些排序依據的標識符(一組列)。 如果您想在服務器端完成所有操作,則可以獲取當前對象的屬性,並針對想要按其排序順序在其后出現的對象專門過濾結果集。
照片索引:
result.IndexOf(photo);
之后的項目:
result.SkipWhile((q, i) => i <= result.IndexOf(photo));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.