CONVERTER ALGORITIMO PARA LINQ

JABA 14/07/2013 10:28:05
#425999
Possuo um metodo que vasculha uma lista de itens e retorna a instância do item com a carta de maior valor. Veja abaixo:

private ItemRodada GetItemComMaiorValor(IList<ItemRodada> itens)
{
if (itens != null && itens.Count > 0)
{
ItemRodada itemRodada = itens[0];
for (int x = 1; x < itens.Count - 1; x++)
{
if (itens[x].Carta.Valor > itemRodada.Carta.Valor)
itemRodada = itens[x];
}
return itemRodada;
}
return null;
}


O método está funcionando, mas eu gostaria de fazer isso com o LINQ ou Métodos de Extensão; alguém sabe como fazer isso?

vlw
KERPLUNK 15/07/2013 08:55:20
#426028
Resposta escolhida
Uma expressão lambda serve?

ItemRodada retornado = itens.ToList().OrderByDescending(it => it.Carta.Valor).FirstOrDefault();

OCELOT 15/07/2013 09:47:54
#426035
Acredito que seria algo do tipo, porém acho que não é tão rápido quanto o seu código

return (from i in itens let m = itens.Max(o => o.Carta.Valor) where i.Carta.Valor == m select i).Single();

Isso considera que itens nunca vai ser nulo, e basicamente ele encontra o maior Valor e então acha o item com este valor, porém não pode existir mais de um item com o mesmo valor, se puder existir mais de um com o mesmo valor você deve trocar o Single() por First() no final ali.
JABA 15/07/2013 11:26:58
#426050
Excelente pessoal! Vou pontuar aquele que resolveu o problema primeiro, e nesse caso foi o KerpLunk. Mas também agradeço tua colaboração Ocelot.

Obrigado a todos.
Tópico encerrado , respostas não são mais permitidas