考慮以下收集如何返回一個項目的周邊項目在LINQ查詢
var players = new[]{
new {Id = 1, Name = "A", Score = 70},
new {Id = 2, Name = "B", Score = 50},
new {Id = 3, Name = "C", Score = 100},
new {Id = 4, Name = "D", Score = 90}
};
如果我想(與ID = 1的發言權,播放器)通過有序上面所列內容返回特定球員的位置進球我可以寫這樣的查詢:
var result = players.OrderByDescending(p => p.Score)
.Select((p, i) => new {player = p, Position = i})
.Where(x => x.player.Id == 1)
.First();
int position = result.Position;
var player = result.player;
現在我怎麼可以藉此更進一步,除了返回周邊項目實際的播放器?當我們按分數排列名單時,相鄰的項目是上一個和下一個玩家以及他們各自的位置。
下面是查詢
var expectedResult = new[]{
new {Id = 2, Name = "B", Score = 50}, //Previous player
new {Id = 1, Name = "A", Score = 70},
new {Id = 4, Name = "D", Score = 90} //Next Player
};
的預期結果可能以上的結果由單個LINQ表達式實現? 任何幫助,將不勝感激。
您還需要一個關係的規則,因爲分數不是總的順序。 – 2011-02-23 15:16:20
感謝您的及時迴應。爲了簡單起見,我想返回的鄰居數量設置爲2(前一個和後一個)。在現實生活中,我有可能有一個非常大的列表,我想返回50個鄰居,我看不到你的解決方案如何允許。 – Payman 2011-02-23 15:30:13