La secuencia contiene más de un elemento.

Estoy teniendo algunos problemas con agarrar una lista del tipo “RhsTruck” a través de Linq y hacer que se muestren.

RhsTruck solo tiene propiedades Make, Model, Serial etc … RhsCustomer tiene propiedades CustomerName, CustomerAddress, etc.

Sigo recibiendo el error “La secuencia contiene más de un elemento”. ¿Algunas ideas? ¿Me estoy acercando a esto de la manera incorrecta?

public RhsCustomer GetCustomer(string 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) { string testCustNum = Page.Request.QueryString["custnum"].ToString(); 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(); } 

El problema es que está utilizando SingleOrDefault . Este método solo tendrá éxito cuando las colecciones contengan exactamente 0 o 1 elemento. Creo que está buscando FirstOrDefault que tendrá éxito sin importar cuántos elementos haya en la colección.

SingleOrDefault método SingleOrDefault lanza una Exception si hay más de un elemento en la secuencia.

Aparentemente, su consulta en GetCustomer está encontrando más de una coincidencia. Por lo tanto, deberá refinar su consulta o, lo más probable, verificar sus datos para ver por qué obtiene múltiples resultados para un número de cliente determinado.

 Use FirstOrDefault insted of SingleOrDefault.. 

SingleOrDefault devuelve un elemento SINGLE o nulo si no se encuentra ningún elemento. Si se encuentran 2 elementos en su Enumerable, se produce la excepción que está viendo.

FirstOrDefault devuelve el primer elemento que encuentra o nulo si no se encuentra ningún elemento. así que si hay 2 elementos que coinciden con su predicado, se ignora el segundo

  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); 

Como @Mehmet está señalando, si su resultado está obteniendo más de 1 elerment, entonces debe analizar sus datos, ya que sospecho que no es por diseño que tenga clientes que compartan un número personalizado.

Pero hasta el punto, quería darles una visión general rápida.

 //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(); 

Para más expresiones Linq, eche un vistazo a System.Linq.Expressions

Para su información, también puede obtener este error si EF Migrations intenta ejecutarse sin Db configurado, por ejemplo, en un proyecto de prueba.

Persiguió esto durante horas antes de que descubriera que estaba cometiendo un error en una consulta, pero no por la consulta sino porque fue cuando se iniciaron las Migraciones para intentar crear la Db.