2009-08-26 8 views
14

は、私はすべてのidプロパティ検索:LINQ

例:

1、10、25、30、4

を持つオブジェクトのリストを持っている私はcurrentIdを有し、その後1は次のようになり、私は例電流Idが25に設定されているため

だから、私は30のIDを持つオブジェクトを返す必要が

リスト内の次のIDを見つける必要がある4.

どうでしょう私はこれをしますエレガントにLINQで?

EDIT

リストは、 "並べ替え" プロパティによって順序付けされます。だから、あなたはイドによって注文することはできません。それは注文を混乱させるからです。

+0

あなたの場合1つのオブジェクトだけを取得して、クエリの順序を変更しないでください。 –

答えて

33

(私は質問を読み違えると思うように私が少し編集に注意してください):明らかに

int[] data = {1, 10, 25, 30, 4}; 
int last = 25; 
var next = data.SkipWhile(i => i != last).Skip(1).First(); 

dataは、オブジェクトのセット、のようなものだった場合:

var next = data.SkipWhile(obj => obj.Id != last).Skip(1).First(); 
+0

また、これがリストの終わりに達してスキップしようとすると、例外がスローされるか、nullが返されますか?私はこれをチェックする必要がありますか? – qui

+2

それはそのままですが、代わりに 'FirstOrDefault'を使うことができます。 –

3
int currentId = 25; 
var next = yourCollection.Where(i => i.Id > currentId).OrderBy(i => i.Id).First(); 
+0

ご注文を駄目にするか、ご迷惑をおかけいたしますか? – qui

2

かなりの解決策があります。私は次のようなことをお勧めします。

var next = items 
    .Where(item => item.Id > currentId) 
    .OrderBy(item => item.Id) 
    .First(); 

var next = items 
    .OrderBy(item => item.Id) 
    .First(item => item.Id > currentId); 

IDをコレクション内に表示する順序で使用するには、次のようにします。

var next = items 
    .SkipWhile(item => item.Id != currentId) 
    .Skip(1) 
    .FirstOrDefault(); 

これはnullを返した場合は、最後の項目の次の項目を取得しようとしています。

並べ替えなし
関連する問題