簡體   English   中英

LINQ-To-SQL行號大於

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM