1. ホーム
  2. c#

[解決済み] LINQを使用してアイテムをリストの先頭に移動させる

2023-05-08 22:18:16

質問

LINQを使って、例えばid=10の項目をリストの最初の項目として移動させる方法はありますか?

アイテムA - id =5
アイテムB - id = 10
アイテムC - id =12
アイテムD - id =1

この場合、項目 C をエレガントな方法で List<T> コレクションの先頭に移動させることができますか?

これが今持っているベストです。

var allCountries = repository.GetCountries();
var topitem = allCountries.Single(x => x.id == 592);  
var finalList = new List<Country>();
finalList.Add(topitem);
finalList = finalList.Concat(allCountries.Where(x=> x.id != 592)).ToList();

どのように解決するのですか?

LINQはコレクションへのクエリ、既存のクエリに対するプロジェクションの作成、既存のコレクションに基づく新しいクエリの生成に強いです。 既存のコレクションをインラインで並べ替えるためのツールとしては意図されていません。 そのような操作には、手元にある型を使用するのが最善です。

以下のような定義を持つ型があると仮定します。

class Item {
  public int Id { get; set; }
  ..
}

次に、以下を試してみてください。

List<Item> list = GetTheList();
var index = list.FindIndex(x => x.Id == 12);
var item = list[index];
list[index] = list[0];
list[0] = item;