System.Collections.Generic.IEnumerable 'enthält keine Definition für' ToList '

80

Hier ist das Problem. Ich erhalte IEnumerable von ViewPage und als ich versuchte, List zu konvertieren, zeigt es mir Fehler wie:

' System.Collections.Generic.IEnumerable<Pax_Detail>' enthält keine Definition für 'ToList' und es konnte keine Erweiterungsmethode 'ToList' gefunden werden, die ein erstes Argument vom Typ ' System.Collections.Generic.IEnumerable<Pax_Detail>' akzeptiert (fehlt Ihnen eine using-Direktive oder eine Assembly-Referenz?)

Hier ist mein Controller-Code:

[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();
}

Ich habe dieselbe Logik auf einen anderen Controller angewendet. Und es funktioniert gut. Ich weiß nicht, welches Problem es hat. Ich habe das Projekt bereits bereinigt, neu erstellt und auch meinen Laptop neu gestartet (obwohl es benötigt wurde).

Dhwani
quelle
Haben Sie verwiesen System.Core.dll?
Faultier
7
Vermeiden Sie es = new List<Pax_Detail>()als Randnotiz, wenn Sie es in der nächsten Zeile mit überschreiben pax.ToList(), da nicht verwendeter Speicher auf diese Weise zugewiesen wird
Pascalhein

Antworten:

226

Vermissen Sie eine using-Direktive für System.Linq?

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

Anthony Sottile
quelle
Oh Danke. Ich verwende Linq nicht in meinem Projekt, aber ich denke, dass es in diesem Fall benötigt wird.
Dhwani
4
Ich würde empfehlen, Resharper zu verwenden. Es ist hervorragend darin, solche Dinge zu erkennen, und würde Sie dazu auffordern, die using-Direktive hinzuzufügen.
Andy Nichols
26

Sie vermissen einen Verweis auf System.Linq.

Hinzufügen

using System.Linq

um Zugriff auf die ToList () - Funktion in der aktuellen Codedatei zu erhalten.


Es Enumerable.ToList<TSource>ist eine Erweiterungsmethode , ein paar Informationen darüber zu geben, warum dies notwendig ist. Erweiterungsmethoden werden außerhalb der ursprünglichen Klasse definiert, auf die sie abzielen. In diesem Fall wird die Erweiterungsmethode im System.LinqNamespace definiert .

Adrian Godong
quelle
7

Eine Alternative zum Hinzufügen von LINQ wäre die Verwendung dieses Codes:

List<Pax_Detail> paxList = new List<Pax_Detail>(pax);
Daniel Hilgarth
quelle
Super hilfreich, wenn Sie dies im Sofortfenster versuchen, während Sie eine Datei debuggen, in der die Direktive fehlt.
Dan Field
Wenn ich das versuche, spiegelt sich jede Änderung von pax auch in paxList wider!
Martin
4

Mir fehlte die Referenz zur System.Data.Entity-DLL, und das Problem wurde behoben

Denis Besic
quelle
0

In meinem Fall hatte ich Code aus einem anderen Projekt kopiert, das Automapper verwendete. Ich brauchte Ewigkeiten, um diesen herauszufinden. Musste nur das Automapper Nuget-Paket zum Projekt hinzufügen.

Myke Black
quelle