System.Collections.Generic.IEnumerable 'не содержит определения для' ToList '

80

Вот в чем проблема. Я получаю IEnumerable из ViewPage, и когда я попытался преобразовать List, он показал мне ошибку, например:

' System.Collections.Generic.IEnumerable<Pax_Detail>' не содержит определения для 'ToList', и не System.Collections.Generic.IEnumerable<Pax_Detail>может быть найден метод расширения 'ToList', принимающий первый аргумент типа ' ' (вам не хватает директивы using или ссылки на сборку?)

Вот мой код контроллера:

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

Я применил ту же логику к другому контроллеру. И работает нормально. Я не знаю, в чем проблема. Я уже очистил, перестроил проект, а также перезапустил свой ноутбук (хотя это было необходимо).

Дхвани
источник
Вы ссылались System.Core.dll?
ленивец
7
в качестве примечания: избегайте = new List<Pax_Detail>()перезаписи его в следующей строке с помощью pax.ToList(), потому что неиспользуемая память распределяется таким образом
pascalhein

Ответы:

228

Вам не хватает директивы using для System.Linq?

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

Энтони Соттиле
источник
ООО Спасибо. Я не использую Linq в своем проекте, но думаю, что в данном случае это необходимо.
Дхвани
4
Я бы порекомендовал использовать resharper. Он отлично умеет замечать подобные вещи и предлагает вам добавить директиву using.
Энди Николс
26

Вам не хватает ссылки на System.Linq.

Добавить

using System.Linq

чтобы получить доступ к функции ToList () в текущем файле кода.


Чтобы дать немного информации о том, почему это необходимо, Enumerable.ToList<TSource>это метод расширения. Методы расширения определены вне исходного класса, на который они нацелены. В этом случае метод расширения определяется в System.Linqпространстве имен.

Адриан Годонг
источник
7

Альтернативой добавлению LINQ было бы использование этого кода:

List<Pax_Detail> paxList = new List<Pax_Detail>(pax);
Дэниел Хилгарт
источник
Очень полезно, если вы пытаетесь сделать это в окне «Немедленное» при отладке файла, в котором отсутствует директива.
Дэн Филд
Когда я пробую это делать, любые изменения в pax отражаются и в paxList!
Мартин
4

Мне не хватало ссылки на dll System.Data.Entity, и проблема была решена

Денис Безич
источник
0

В моем случае я скопировал некоторый код из другого проекта, в котором использовался Automapper - мне потребовалось много времени, чтобы разобраться с этим. Просто нужно было добавить в проект пакет nuget automapper.

Майк Блэк
источник