2009-02-25 5 views
5

Mi piacerebbe creare una tabella dati data una lista usando il metodo CopyToDataTable disponibile in DataTableExtensions. Ho già fatto la domanda How do I transform a List into a DataSet? e ottenuto un exceptional answer da CMS, che era quello di raggiungere quello che volevo con la creazione di un prolungamento public static DataTable ToDataTable<T>(this IEnumerable<T> collection)Come utilizzare il metodo CopyToDataTable System.Data.DataTableExtensions?

ho usato quello che ha suggerito ... ma di recente ho ci ho seen in a blog che già esiste una tale estensione ... CopyToDataTable<T>(this IEnumerable<T> source) : DataTable che esiste in System.Data.DataTableExtensions.

Come risultato, immagino che dovrei passare a utilizzare questo metodo di estensione integrato invece di usarne uno che dovrei mantenere.

Sfortunatamente, sto avendo un po 'di problemi a capire come usarlo.

Posso prendere il mio IList e dire myListofMyClass.CopyToDataTable() ma ottengo un errore di compilazione che dice "Il tipo 'MyClass' deve essere convertibile in 'System.Data.DataRow' per poterlo usare come parametro 'T 'nel metodo generico ... "

C'è qualcosa di speciale che devo fare MyClass per renderlo convertibile in System.Data.DataRow? C'è qualche interfaccia che devo implementare?

risposta

2

Vedere questo link (che è una raccolta di DataRow, oltre a un mucchio di spazzatura CTDT gestisce l'aspetto "spazzatura".):

http://blogs.msdn.com/aconrad/archive/2007/09/07/science-project.aspx

Fondamentalmente, faceva parte di Linq, ma per qualche motivo è stato rimosso. Il suo metodo lì funziona benissimo, quindi dai un'occhiata.

+0

Ho seguito questa risposta perché è la più vicina a ciò che volevo. Non credo che userò queste soluzioni ... ma almeno risponde alla mia domanda sul perché non potrei usarlo da quando hanno abbandonato la funzione e il post del blog era di ritorno nei giorni beta ... – mezoid

+0

Perché non lo userai? L'abbiamo aggiunto al nostro framework al lavoro (insieme alla correzione nulla che troverai in uno dei commenti su quel post del blog) e funziona davvero alla grande. – BFree

1

Ahimè, per CopyToDataTable, T deve essere DataRow (o un tipo derivato da DataRow).

(Vedi the MSDN documentation per ulteriori informazioni.)

+0

* sigh * Speravo che non fosse il caso. Avevo letto il documento MSDN ma non mi ero reso conto del fatto che doveva essere assolutamente un DataRow o qualcosa derivato da DataRow ... – mezoid

1

Questo non è proprio quello che si vuole. CopyToDataTable è fatto per la copia di collezioni specificatamente di DataRow in un DataTable;