CONVERTER ALGORITIMO PARA LINQ
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
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
Uma expressão lambda serve?
ItemRodada retornado = itens.ToList().OrderByDescending(it => it.Carta.Valor).FirstOrDefault();
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.
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.
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.
Obrigado a todos.
Tópico encerrado , respostas não são mais permitidas