System.Collections.Generic.IEnumerable 'no contiene ninguna definición para' ToList '

80

Aqui esta el problema. Obtengo IEnumerable de ViewPage y cuando lo intenté para convertir la lista, me muestra un error como:

' System.Collections.Generic.IEnumerable<Pax_Detail>' no contiene una definición para 'ToList' y no se System.Collections.Generic.IEnumerable<Pax_Detail>pudo encontrar ningún método de extensión 'ToList' que acepte un primer argumento de tipo ' ' (¿le falta una directiva using o una referencia de ensamblado?)

Aquí está mi código de controlador:

[HttpPost]
public ActionResult Edit_Booking(Booking model, IEnumerable<Pax_Detail> pax)
{
  List<Pax_Detail> paxList = new List<Pax_Detail>();
  paxList = pax.ToList(); //getting error here
  BookingDL.Update_Booking(model, paxList);
  return View();
}

He aplicado la misma lógica en otro controlador. Y está funcionando bien. No sé qué problema tiene. Ya limpié, reconstruí el proyecto y también reinicié mi computadora portátil (aunque era necesario).

Dhwani
fuente
¿Ha hecho referencia System.Core.dll?
perezoso
7
como nota al margen, evite = new List<Pax_Detail>()al sobrescribirlo en la siguiente línea con pax.ToList(), porque la memoria no utilizada se asigna de esta manera
pascalhein

Respuestas:

228

¿Falta una directiva de uso para System.Linq?

http://msdn.microsoft.com/en-us/library/bb342261.aspx

Anthony Sottile
fuente
Oh gracias. No estoy usando Linq en mi proyecto, pero creo que es necesario en este caso.
Dhwani
4
Recomendaría usar resharper. Es brillante para detectar cosas como esta y le pedirá que agregue la directiva using.
Andy Nichols
26

Falta una referencia a System.Linq.

Añadir

using System.Linq

para obtener acceso a la función ToList () en el archivo de código actual.


Dar un poco de información sobre por qué esto es necesario, Enumerable.ToList<TSource>es un método de extensión. Los métodos de extensión se definen fuera de la clase original a la que apunta. En este caso, el método de extensión se define en el System.Linqespacio de nombres.

Adrian Godong
fuente
7

Una alternativa a agregar LINQ sería usar este código en su lugar:

List<Pax_Detail> paxList = new List<Pax_Detail>(pax);
Daniel Hilgarth
fuente
Muy útil si está intentando hacer esto en la ventana Inmediato mientras depura un archivo al que le falta la directiva.
Dan Field
¡Cuando intento esto, cualquier cambio en pax también se refleja en paxList!
Martin
4

Me faltaba la referencia de dll System.Data.Entity y el problema se resolvió

Denis Besic
fuente
0

En mi caso, había copiado un código de otro proyecto que usaba Automapper; me llevó años resolverlo. Solo tuve que agregar el paquete automapper nuget al proyecto.

Myke Black
fuente