2011-06-20 6 views
0

SortOrderで表示される項目を持つ表があります。 SortOrdersは1〜100の範囲でスキップする値で、非常にうまくインクリメントされません。私がやりたいことは、一緒に接近している2つのアイテムのSortOrder値をフリップフロップして、必ずしもを知ることなく、が一緒に閉じることです。例:LINQ並べ替え順序を最も近い値に更新する

ItemX.SortOrder = 5; 
ItemY.SortOrder = 26; 

ソート順が5-26の項目はありません。

ItemX.SortOrder = 5; 
ItemY.SortOrder = 26; 
ItemZ.SortOrder = 34; 

は、次のようになります:

ItemX.SortOrder = 34; 
ItemY.SortOrder = 26; 
ItemZ.SortOrder = 5; 
私のコードは、ランダムアイテムは、そのようなことでSortOrdersスイッチングされ、いくつかの理由

ItemX.SortOrder = 26; 
ItemY.SortOrder = 5; 

私のコードは、これを切り替える必要があります

私はそれが私の質問の結果は私がそれらを描いている方法で順序付けされていないためだと思う。ここに私の照会コードです。何かが必要な場合は、私に知らせてください。

itemToSwitch = DataSource.Items.Where(item => item.SortOrder > currentItem.SortOrder).First(); 
int? next = itemToSwitch.SortOrder; 
int? previous = currentItem.SortOrder; 
currentItem.SortOrder = next; 
itemToSwitch.SortOrder = previous; 

申し訳ありませんが、私の質問は読んだり、混乱したりします。私は可能な限り明確にしようとしています。

+1

に役立つかもしれません。これは単なるクエリスニペットです。しかし、フリップフロップはゼロになります。 – sehe

+0

大丈夫です。私は残りを掲示します。 –

+0

なぜあなたは好奇心のためにこれをやろうとしていますか?あなたの目標は何ですか? –

答えて

1

私はあなたが実際にしたい疑っています:

var sorted = DataSource.Items.OrderBy(item => item.SortOrder); 

あなたはそれを再利用している場合、.ToList()はあなたが全体の機能を掲示する必要が

+0

完璧!ありがとう! –

+0

喜んで助けました。それは幸運な推測でした。次回は、言及された他のもののように、問題を最初に説明し、次にあなたが立ち往生している場所を説明してください。 「ユーザーが表示されたリストのソート順を定義できるようにする」のようなものです。実際には、私はあなたがそれをしながら並べ替えが必要とは思わない。しかし、保存するときは、リストインデックスをSortOrderキーとして使用して永続化したいと思うかもしれません:) – sehe

0

はなぜ使用しない:

var greatesItem = DataSource.Items.OrderBy(item => item.SortOrder).Fisrt(); 
var smallestItem = DataSource.Items.OrderBy(item => item.SortOrder).Last(); 

var tempOrder = greatesItem.SortOrder; 
greatesItem.SortOrder = smallestItem.SortOrder; 
smallestItem.SortOrder = tempOrder; 

を次に使用すると、データベースへの変更を提出します。 (私はそれを使って関数を実行することをお勧めします)。

+0

私は最初と最後の項目を切り替えようとはせず、次の項目だけを順番に切り替えようとしています。 –

+0

説明に2つ以上の項目がリストに含まれているかどうかは不明です。安心して申し訳ありません。 – Muffun

関連する問題