c# - objects - LINQ "MaxOrDefault"?
linq to entities (3)
Qué tal si:
int new_id = 0;
if (C_Movement.list.Any())
new_id = C_Movement.list.Max(x => x.id) + 1;
Soy nuevo en LINQ. Necesito calcular new_id de la siguiente manera:
public class C_Movement
{
public int id=-1;
public static ObservableCollection<C_Movement> list=new ObservableCollection<C_Movement>();
// ...
}
int new_id = (C_Movement.list.Count==0) ? 0 : C_Movement.list.Max(x => x.id)+1;
¿Hay una forma LINQ de compactar esa expresión, para que no tenga que usar la estructura "?:"? El problema es que, cuando C_Movement.list no contiene elementos, C_Movement.list.Max (x => x.id) devuelve nulo (y me gustaría que devolviera -1, en su lugar).
Gracias.
DefaultIfEmpty método DefaultIfEmpty debería ayudar:
int new_id = C_Movement.list.Select(x => x.id).DefaultIfEmpty(-1).Max()+1;
int new_id = C_Movement.list.Max(x => (int?)x.id).GetValueOrDefault(-1) + 1;
donde GetValueOrDefault
es un method de Nullable<T>
.