考虑以下收集如何返回一个项目的周边项目在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