2012-04-26 3 views
18

Мне нужно преобразовать результат запроса linq в список. Я попытался следующий код: ПроизошлаКак преобразовать результат запроса LINQ в List?

var qry = from a in obj.tbCourses 
        select a; 

List<course> lst = new List<course>(); 
lst = qry.ToList(); 

Следующая ошибка в коде выше:

Cannot implicitly convert type 
System.Collections.Generic.List<Datalogiclayer.tbcourse> to 
System.Collections.Generic.List<course> 
+0

Как это не помогло? Чего вы ожидали, чего не случилось? – BrokenGlass

+0

BTW, ваш код может быть намного короче ... 'var lst = obj.tbCourses.ToList();' –

+0

возможный дубликат [Синтаксис для запроса linq к списку ] (http://stackoverflow.com/questions/7488980/syntax-for-linq-query-to-liststring) – nawfal

ответ

15

Нет необходимости делать так много работы ..

var query = from c in obj.tbCourses 
     where ... 
     select c; 

Затем вы можете использовать:

List<course> list_course= query.ToList<course>(); 

Он отлично работает для меня.

5

Вы должны использовать ключевое слово select new LINQ явно преобразовать tbcourse объект в пользовательский тип course. Пример select new:

var q = from o in db.Orders 
     where o.Products.ProductName.StartsWith("Asset") && 
       o.PaymentApproved == true 
     select new { name = o.Contacts.FirstName + " " + 
           o.Contacts.LastName, 
        product = o.Products.ProductName, 
        version = o.Products.Version + 
           (o.Products.SubVersion * 0.1) 
        }; 

http://www.hookedonlinq.com/LINQtoSQL5MinuteOverview.ashx

8

Вы должны каким-то образом преобразовать каждый объект tbcourse к экземпляру course. Например, course может иметь конструктор, который принимает tbcourse. Затем можно написать запрос, как это:

var qry = from c in obj.tbCourses 
      select new course(c); 

List<course> lst = qry.ToList(); 
+0

Это креатив! Но у него есть один недостаток, что ваш проект модели теперь будет иметь зависимость от вашего репозитория данных. Хотя это было бы хорошо в меньшем проекте, в зависимости от вашей архитектуры и разделения констеров, это может быть проблемой. – msigman

1

Что вы можете сделать, это выбрать все в новом экземпляре курса, а затем преобразовать их в список.

var qry = from a in obj.tbCourses 
        select new Course() { 
         Course.Property = a.Property 
         ... 
        }; 

qry.toList<Course>(); 
16
List<course> = (from c in obj.tbCourses 
       select 
       new course(c)).toList(); 

Вы можете преобразовать объект сущности в список непосредственно на вызов. Существуют методы преобразования его в разные структуры данных (список, массив, словарь, поиск или строку).

+0

ИМХО это лучший ответ. Это не только одиночная команда, но также иллюстрирует, что 'from ... select ...' Синтаксис linq по-прежнему сохраняет значение, эквивалентное стандартной форме ('tbCourses.Select()') – miroxlav

Смежные вопросы