2012-04-26 16 views
18

Potrzebuję przekonwertować wynik zapytania linq do listy. Próbowałem następujący kod:Jak przekonwertować wynik zapytania LINQ na listę?

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

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

następujący błąd wystąpił do powyższego kodu:

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

Jak to nie pomogło? Czego się spodziewałeś, że tak się nie stało? – BrokenGlass

+0

BTW, Twój kod może być znacznie krótszy ... 'var lst = obj.tbCourses.ToList();' –

+0

możliwy duplikat [Składnia dla zapytania linq do Listy ] (http://stackoverflow.com/questions/7488980/syntax-for-linq-query-to-liststring) – nawfal

Odpowiedz

15

Nie trzeba robić tyle roboty ..

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

Następnie można użyć:

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

To działa dobrze dla mnie.

5

trzeba użyć słowa kluczowego select new LINQ jawnie przekonwertować podmiot tbcourse do niestandardowego typu course. Przykład 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

trzeba jakoś przekonwertować każdy obiekt tbcourse do instancji course. Na przykład course może mieć konstruktora, który ma tbcourse. Następnie można napisać kwerendę tak:

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

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

To jest twórcze! Ale ma jedną wadę, że projekt twojego modelu będzie teraz zależny od twojego repozytorium danych. Chociaż byłoby to dobrze w mniejszym projekcie, w zależności od architektury i separacji forów, może to stanowić problem. – msigman

1

Co można zrobić, to wybrać wszystko w nowej instancji Course, a następnie przekonwertować je na listę.

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

można konwertować obiekt podmiot do listy bezpośrednio na wezwanie. Istnieją metody konwersji go na inną strukturę danych (lista, tablica, słownik, odnośnik lub ciąg znaków).

+0

IMHO to jest najlepsza odpowiedź. Jest to nie tylko pojedyncze polecenie, ale także ilustruje, że 'od ... select ...' składnia linq nadal zachowuje znaczenie równoważne ze standardową formą ('tbCourses.Select()') – miroxlav

Powiązane problemy