2017-09-11 4 views
1

J'ai bricolé ensemble ce que je pensais être une solution à ce que je voulais faire sur la base d'autres discussions sur ce sujet (retourner un certain nombre d'éléments dans une liste) mais je pense que ma syntaxe est un peu de et il ne me permet pas de faire la somme des éléments que j'ai pris.moyenne des 3 premiers articles de la liste utilisant linq

Voici ce que j'ai:

public decimal average_of_items_examples(List<Car> cars) 
     { 
      if (cars == null) 
      { 
       return 0; 
      } 
      else if (cars.Count == 0) 
      { 
       return 0; 
      } 
      else 
      { 
       return cars.OrderBy(x => x.SuggestedRetailPrice).Take(3).Average(); 
      } 
     } 

Je vous remercie de toute aide et apprécier des explications.

EDIT: Désolé j'ai oublié d'ajouter pourquoi j'ai le OrderBy part. Je veux seulement la moyenne des 3 voitures moins chères.

REMARQUE: Je ne peux pas changer le type "décimal" car c'est ainsi que l'exercice a été écrit.

+0

Qu'essayez-vous de faire? Le SuggestedRetailPrice? –

+0

Oui. Je le crois, car c'est le seul paramètre logique qui soit une valeur décimale. – William

+0

Désolé j'ai ajouté des informations de clarification que je veux seulement au prix moyen des 3 voitures les moins chères dans la liste, d'où mon original "OrderBy" – William

Répondre

3

deux:

cars.OrderBy(x => x.SuggestedRetailPrice).Take(3).Select(z => z.SuggestedRetailPrice).Average(); 

et:

cars.Select(z => z.SuggestedRetailPrice).OrderBy(x => x).Take(3).Average(); 

fera De quoi as-tu besoin.

Ils sont fondamentalement identiques.

3
.Average(x => x.SuggestedRetailPrice) 

Vous devez spécifier la propriété que vous souhaitez obtenir en moyenne depuis la collection est pour Car objets