2016-05-31 5 views
0

Я пытаюсь сортировочных группы по активным игрокам ...OrderBy с LINQ некоторого условием

В этом случае первой группа содержит крупнейшие игрок внутри:

List<Group> groups = tournament.Groups.OrderByDescending(o => o.Players.Count).ToList(); 

Я должен добавить фильтр, который будет считать только активных игроков. Что-то вроде этого:

if (o.Players[index].Active == true) 
    count Players[index] into o.Players.Count 

Может кто-нибудь помочь мне с синтаксисом?

ответ

2

вы можете использовать это:

List<Group> groups = tournament.Groups 
        .OrderByDescending(o => o.Players.Count(P => P.Active)).ToList(); 
1

Если вы хотите, чтобы фильтровать только на активных игроков, вы можете передать предикат в методе Count расширения:

List<Group> groups = tournament 
        .Groups 
        .OrderByDescending 
         (o => o.Players.Count(p => p.Active)) 
        .ToList(); 
0

Вы можете, как показать в результате количество фактических игроков, а не только их сортировка

var query = from g in tournament.Groups 
      let activePlayers = g.Players.Count(p=>p.Active) 

      orderby activePlayers descending 
      select new {Group = g, ActivePlayers = activePlayers};