2013-04-04 2 views
51

В этом проблема. Я получаю IEnumerable от ViewPage и когда я попробовал преобразовать список он показывает мне ошибку, как:System.Collections.Generic.IEnumerable 'не содержит определения для' ToList '

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

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

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

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

+0

Вы ссылается 'System.Core.dll '? – sloth

+6

как примечание стороны, избегайте '= new List ()' при перезаписывании его в следующей строке с помощью 'pax.ToList()', потому что неиспользуемая память выделяется таким образом – pascalhein

ответ

151

Вам не хватает указаний по использованию для System.Linq?

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

+0

О, спасибо. Я не использую Linq в своем проекте, но я думаю, что это необходимо в этом случае. – Dhwani

+3

Я бы рекомендовал использовать resharper. Это замечательно в том, что нужно продумать такие вещи, и предложит вам добавить директиву использования. –

+0

@ Энди Николс собирался это сказать. Удивительный инструмент для решения этой проблемы. –

19

Вы упускаете ссылку на System.Linq.

Добавить

using System.Linq 

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


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

6

Альтернативой добавления LINQ будет использовать этот код вместо:

List<Pax_Detail> paxList = new List<Pax_Detail>(pax); 
+0

Очень полезно, если вы пытаетесь сделать это в окне Immediate при отладке файла, которому не указана директива. –

3

я пропускал ссылка длл System.Data.Entity и проблема была решена