System.Collections.Generic.IEnumerable ”nie zawiera żadnej definicji„ ToList ”

80

Tu jest problem. Otrzymuję IEnumerable z ViewPage i kiedy próbowałem przekonwertować Listę, pokazuje mi błąd taki jak:

System.Collections.Generic.IEnumerable<Pax_Detail>” nie zawiera definicji „ToList” i nie można znaleźć metody rozszerzającej „ToList” akceptującej pierwszy argument typu „ System.Collections.Generic.IEnumerable<Pax_Detail>” (brakuje dyrektywy using lub odwołania do zestawu?)

Oto mój kod kontrolera:

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

Zastosowałem tę samą logikę na innym kontrolerze. I działa dobrze. Nie wiem, jaki ma problem. Wyczyściłem, przebudowałem projekt i zrestartowałem laptopa (choć było to potrzebne).

Dhwani
źródło
Czy odwoływałeś się System.Core.dll?
lenistwo
7
na marginesie, unikaj = new List<Pax_Detail>()nadpisywania go w następnej linii pax.ToList(), ponieważ w ten sposób alokowana jest nieużywana pamięć
pascalhein

Odpowiedzi:

228

Brakuje Ci dyrektywy using dla System.Linq?

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

Anthony Sottile
źródło
Oh dziękuję. Nie używam Linq w moim projekcie, ale myślę, że jest to potrzebne w tym przypadku.
Dhwani
4
Polecam użycie resharpera. Jest świetny w wykrywaniu takich rzeczy i zachęciłby cię do dodania dyrektywy using.
Andy Nichols
26

Brakuje odniesienia do System.Linq.

Dodaj

using System.Linq

aby uzyskać dostęp do funkcji ToList () w bieżącym pliku kodu.


Podanie trochę informacji o tym, dlaczego jest to konieczne, Enumerable.ToList<TSource>jest metodą rozszerzającą. Metody rozszerzające są zdefiniowane poza oryginalną klasą, do której są przeznaczone. W tym przypadku metoda rozszerzenia jest zdefiniowana w System.Linqprzestrzeni nazw.

Adrian Godong
źródło
7

Alternatywą dla dodania LINQ byłoby użycie tego kodu:

List<Pax_Detail> paxList = new List<Pax_Detail>(pax);
Daniel Hilgarth
źródło
Bardzo przydatne, jeśli próbujesz to zrobić w oknie bezpośrednim podczas debugowania pliku, w którym brakuje dyrektywy.
Dan Field
Kiedy próbuję tego, każda zmiana w pax jest również odzwierciedlana w paxList!
Martin,
4

Brakowało mi odniesienia dll System.Data.Entity i problem został rozwiązany

Denis Besic
źródło
0

W moim przypadku skopiowałem kod z innego projektu, który korzystał z Automappera - przepracowanie tego zajęło mi wieki. Wystarczyło dodać pakiet automapper nuget do projektu.

Myke Black
źródło