utilizzare LINQ per trovare il prodotto con il valore più economico?

Sto imparando LINQ e voglio trovare il prodotto più economico dal seguente elenco:

List products = new List { new Product {Name = "Kayak", Price = 275M, ID=1}, new Product {Name = "Lifejacket", Price = 48.95M, ID=2}, new Product {Name = "Soccer ball", Price = 19.50M, ID=3}, }; 

Ho trovato il seguente, ma in qualche modo sembra che non sia il modo migliore per farlo:

 var cheapest = products.Find(p => p.Price == products.Min(m => m.Price)); 

puoi mostrarmi il modo giusto per raggiungere questo objective.

Dovresti usare MinBy :

 public static TSource MinBy( this IEnumerable source, Func projectionToComparable ) { using (var e = source.GetEnumerator()) { if (!e.MoveNext()) { throw new InvalidOperationException("Sequence is empty."); } TSource min = e.Current; IComparable minProjection = projectionToComparable(e.Current); while (e.MoveNext()) { IComparable currentProjection = projectionToComparable(e.Current); if (currentProjection.CompareTo(minProjection) < 0) { min = e.Current; minProjection = currentProjection; } } return min; } } 

Basta aggiungere questo come metodo in una class public static ( EnumerableExtensions ?).

Ora puoi dire

 var cheapest = products.MinBy(x => x.Price); 

In alternativa, puoi semplicemente ordinarli e prendere il primo risultato, questo presuppone che tu stia cercando l’object Product e non il valore Price ; così.

 var cheapestProduct = products.OrderBy(p => p.Price).FirstOrDefault(); var mostExpensiveProduct = products.OrderByDescending(p => p.Price).FirstOrDefault(); 

È necessario ordinare prima il prezzo e poi selezionare il primo.

 if(products.Any()){ var productWithCheapestPrice = products.OrderBy(p => p.Price).First(); }