2009-02-02 15 views
11

Puesto que no hay LINQ a DB2 todavía (vamos IBM!), Y quiero tratar con IQueryables o IEnumerables en mi código, ¿cómo puedo convertir un DataTable en IQueryable? O un IEnumerable?Convierte conjunto de datos para IQueryable <T> o IEnumerable <T>

que tienen una interfaz y una clase que coincide con las columnas en la tabla de datos ...

IQueryable<IMyData> GetAS400Data(..parameters..) 
{ 
    DataSet d = GetData(); 
    ... 
    //Some code to convert d to IQueryable<IMyData> 
} 

DataTable.Rows no soporta .AsQueryable, ya MSFT tiró de él, así que no estoy seguro de qué haz aquí.

+0

.AsEnumerable() <= using System.Data; –

Respuesta

17
table.AsEnumerable()... 

table.AsEnumerable().AsQueryable()... 

Sin embargo, lo que se necesita para escribir su propia traducción (Select) a su tipo; y el IQueryable<T> seguiría utilizando LINQ-to-Objects; el único propósito (en este escenario) de usar IQueryable<T> sobre IEnumerable<T> sería usar expresiones por alguna otra razón, tal vez para el dynamic LINQ library.

+0

¿Cómo se convierte de la otra manera? ¿De IQueryable a una DataTable? – MattSlay

+1

El 'IQueryable ' es esencialmente una vista de los datos. El 'DataTable' original aún permanece. Para * crear * una 'DataTable', quizás vea esto: http://stackoverflow.com/questions/545328/datatable-to-generic-list-memory-leak –

+0

@MarcGravell podría elaborar por favor sobre cómo hacer la traducción? intenté IQueryable resultList = (DataSet.Tables [0]). AsEnumerable(). AsQueryable(); Tengo un error: no puedo convertir el tipo IQueryable para escribir IQueryable . –

1

Take a look here parece que existe un proveedor con entidad de marco para DB2.

+0

Desafortunadamente, debido a una mala experiencia el año pasado, EF ha sido descartado para mí. Eso es desafortunado, ya que EF es el futuro de MSFT ... – jlembke

1

puede usar algo como esto.

DataSet ds = GetData(); 
DataTable dt= ds.Tables[0]; 
var query = 
    from row in dt.AsEnumerable() 
    select new IMyData() 
    { 
     property1= row[0], 
     property2= row[1] 
    }; 
Cuestiones relacionadas