LINQでテーブル内の位置を取得する

私はテーブルを持っている列を持つプレイヤー:ID名ポイント

LINQを使用してポイント順にプレイヤーの位置を取得する最も効率的な方法は何ですか?

2
db.Players.OrderByDescending(u => u.Points).ToList(); dbはlinqデータコンテキストです
追加された 著者 Arion,
あなたはテーブルがどこにあるのかというリストの位置を意味しますか?それとも、ID =ポジションですか?
追加された 著者 DJ Burb,
あなたはPointによって注文された結果セットを得ることができますか?その後、IDを知っているレコードの序数を取得する方法を尋ねていますか?
追加された 著者 Davide Piras,
リスト内の位置
追加された 著者 Reno,

3 答え

どのような解決策でも、すべての要素を通じて少なくとも1回の反復が必要ですが、次のことで十分です。

var ordered = players.OrderByDescending(p => p.Points).ToList();

これにより、要素を1回のパスで順序付けし、結果をリストに格納して、順序を保持し直す必要はありません。

int position = ordered.IndexOf(player);
3
追加された

あなたのdemandeは1つのlinqクエリですが、これはそれを行う方法です:

int pos = 0;

foreach(var item in Players.OrderByDescending(u =>u.Points).ToList())
{
  pos++;
  if (item.Name == yourPlayerName)
  break;
} 
return pos;
2
追加された

ポジションを取得する別のオプション(Akremのものに似ていますが、コレクションを手動で繰り返しません)。

    [TestMethod]
    public void TestMethod()
    {
        var table = new[] 
        {
            new{ Id = 1, Name = "Paul", Points = 10},
            new{ Id = 2, Name = "Ringo", Points = 2},
            new{ Id = 3, Name = "George", Points = 30},
            new{ Id = 4, Name = "John", Points = 5}
        };
        int position = table.OrderByDescending(x => x.Points).TakeWhile(x => x.Name != "Paul").Count() + 1;
        Assert.AreEqual(2, position);
    }
1
追加された