2012-02-06 2 views
2

와 테이블에 위치를 얻을 : ID 이름나는 열이있는 테이블 플레이어가 LINQ

LINQ를 사용하여 포인트 주문 플레이어의 위치를 ​​얻을 수있는 가장 효율적인 방법은 무엇 포인트?

+0

포인트로 주문한 결과 집합을 얻을 수 있습니까? 그 후에 ID를 알고있는 레코드의 서수를받는 방법을 묻고 있습니까? –

+0

테이블이있는 위치의 목록에서의 위치를 ​​의미합니까? 아니면 ID = 위치를 의미합니까? –

+0

db.Players.OrderByDescending (u => u.Points) .ToList(); 여기서 db는 목록에서 linq 데이터 컨텍스트 – Arion

답변

3

모든 솔루션은 모든 요소를 ​​통해 적어도 하나의 반복을 필요로하지만, 다음은 충분합니다 :

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

이없이 순서를 유지하기 위해 목록에 결과를 저장 한 후 한 패스의 요소를 주문하고합니다

int position = ordered.IndexOf(player); 
2

당신의 demande는 하나의 LINQ 쿼리하지만이 그것을 할 수있는 방법입니다 : : 다시 '위해'필요

int pos = 0; 

foreach(var item in Players.OrderByDescending(u =>u.Points).ToList()) 
{ 
    pos++; 
    if (item.Name == yourPlayerName) 
    break; 
} 
return pos; 
1

위치를 얻는 또 다른 옵션 (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); 
    } 
관련 문제