2012-04-26 12 views
18

Devo convertire il risultato della query di linq in elenco. Ho provato il seguente codice: Si è verificatoCome convertire il risultato della query LINQ in Elenco?

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

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

il seguente errore per il codice di cui sopra:

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

come non aiutare? Cosa ti aspettavi che non fosse successo? – BrokenGlass

+0

BTW, il tuo codice potrebbe essere molto più breve ... 'var lst = obj.tbCourses.ToList();' –

+0

possibile duplicato di [Sintassi per query di linq su Elenco ] (http://stackoverflow.com/questions/7488980/syntax-per-linq-query-to-liststring) – nawfal

risposta

15

Non c'è bisogno di fare molto di opere ..

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

quindi è possibile utilizzare:

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

Funziona bene per me.

5

È necessario utilizzare la parola chiave select new LINQ per convertire in modo esplicito vostra entità tbcourse nel tipo personalizzato course. Esempio di 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

È necessario convertire in qualche modo ogni oggetto tbcourse a un'istanza di course. Ad esempio, course potrebbe avere un costruttore che accetta uno tbcourse. Si potrebbe quindi scrivere la query in questo modo:

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

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

Questo è creativo! Ma ha uno svantaggio che il progetto dei tuoi modelli ora avrà una dipendenza dal tuo repository di dati. Mentre questo andrebbe bene in un progetto più piccolo, a seconda dell'architettura e della separazione dei concessi, questo potrebbe essere un problema. – msigman

1

Quello che puoi fare è selezionare tutto in una nuova istanza di Corso, e poi convertirli in una Lista.

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

è possibile convertire l'oggetto entità a un elenco direttamente sulla chiamata. Esistono metodi per convertirlo in strutture di dati diversi (elenco, array, dizionario, ricerca o stringa)

+0

IMHO questa è la migliore risposta. Non è solo un singolo comando, ma illustra anche che 'da ... selezionare ...' la sintassi di linq continua a mantenere il suo significato equivalente al formato standard ('tbCourses.Select()') – miroxlav

Problemi correlati