La séquence contient plus d’un élément

J’ai quelques problèmes avec la saisie d’une liste de type “RhsTruck” via Linq et leur affichage.

RhsTruck a juste des marques Make, Model, Serial etc … RhsCustomer a des propriétés CustomerName, CustomerAddress, etc …

Je continue à recevoir l’erreur “La séquence contient plus d’un élément”. Des idées? Est-ce que je m’approche de la mauvaise façon?

public RhsCustomer GetCustomer(ssortingng customerNumber) { using (RhsEbsDataContext context = new RhsEbsDataContext() ) { RhsCustomer rc = (from x in context.custmasts where x.kcustnum == customerNumber select new RhsCustomer() { CustomerName = x.custname, CustomerAddress = x.custadd + ", " + x.custcity CustomerPhone = x.custphone, CustomerFax = x.custfax }).SingleOrDefault(); return rc; } } public List GetEquipmentOwned(RhsCustomer cust) { using (RhsEbsDataContext context = new RhsEbsDataContext()) { var trucks = (from m in context.mkpops join c in context.custmasts on m.kcustnum equals c.kcustnum where m.kcustnum == cust.CustomerNumber select new RhsTruck { Make = m.kmfg, Model = m.kmodel, Serial = m.kserialnum, EquipID = m.kserialno1, IsRental = false }).ToList(); return trucks; } } protected void Page_Load(object sender, EventArgs e) { ssortingng testCustNum = Page.Request.QuerySsortingng["custnum"].ToSsortingng(); RhsCustomerRepository rcrep = new RhsCustomerRepository(); RhsCustomer rc = rcrep.GetCustomer(testCustNum); List trucks = rcrep.GetEquipmentOwned(rc); // I want to display the List into a Gridview w/auto-generated columns GridViewTrucks.DataSource = trucks; GridViewTrucks.DataBind(); } 

Le problème est que vous utilisez SingleOrDefault . Cette méthode ne réussira que lorsque les collections contiennent exactement 0 ou 1 élément. Je pense que vous recherchez FirstOrDefault qui réussira quel que soit le nombre d’éléments de la collection.

SingleOrDefault méthode SingleOrDefault renvoie une Exception s’il y a plus d’un élément dans la séquence.

Apparemment, votre requête dans GetCustomer trouve plus d’une correspondance. Vous devrez donc soit affiner votre requête, soit vérifier vos données pour voir pourquoi vous obtenez plusieurs résultats pour un numéro de client donné.

 Use FirstOrDefault insted of SingleOrDefault.. 

SingleOrDefault renvoie un élément SINGLE ou null si aucun élément n’est trouvé. Si 2 éléments sont trouvés dans votre Enumerable, alors il génère l’exception que vous voyez

FirstOrDefault renvoie l’élément FIRST qu’il trouve ou null si aucun élément n’est trouvé. donc s’il y a 2 éléments qui correspondent à votre prédicat, le second est ignoré

  public int GetPackage(int id,int emp) { int getpackages=Convert.ToInt32(EmployerSubscriptionPackage.GetAllData().Where(x => x.SubscriptionPackageID ==`enter code here` id && x.EmployerID==emp ).FirstOrDefault().ID); return getpackages; } 1. var EmployerId = Convert.ToInt32(Session["EmployerId"]); var getpackage = GetPackage(employerSubscription.ID, EmployerId); 

Comme @Mehmet le souligne, si votre résultat retourne plus de 1 elerment, vous devez regarder vos données car je pense que ce n’est pas par conception que vous partagez un numéro de client avec vos clients.

Mais au point que je voulais vous donner un aperçu rapide.

 //success on 0 or 1 in the list, returns dafault() of whats in the list if 0 list.SingleOrDefault(); //success on 1 and only 1 in the list list.Single(); //success on 0-n, returns first element in the list or default() if 0 list.FirstOrDefault(); //success 1-n, returns the first element in the list list.First(); //success on 0-n, returns first element in the list or default() if 0 list.LastOrDefault(); //success 1-n, returns the last element in the list list.Last(); 

pour plus d’expressions Linq, jetez un oeil à System.Linq.Expressions

FYI vous pouvez également obtenir cette erreur si EF Migrations essaie de s’exécuter sans Db configuré, par exemple dans un projet de test.

J’ai chassé cela pendant des heures avant de me rendre compte qu’il s’agissait d’une erreur sur une requête, mais pas à cause de la requête, mais parce que Migrations a commencé à essayer de créer la firebase database.