2009-02-02 5 views
11

Da es noch keine Linq zu DB2 gibt (c'mon IBM!), Und ich möchte mit IQueryables oder IEnumerables in meinem Code umgehen, wie würde ich eine DataTable in ein IQueryable konvertieren? Oder ein IEnumerable?Konvertieren von Dataset in IQueryable <T> oder IEnumerable

Ich habe eine Schnittstelle und eine Klasse, die die Spalten in der Datentabelle übereinstimmt ...

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

DataTable.Rows nicht .AsQueryable unterstützen, da MSFT es zerrte, also bin ich nicht sicher, was zu mach es hier.

+0

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

Antwort

17
table.AsEnumerable()... 

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

Allerdings müssen Sie Ihre eigene Übersetzung (Select), um Ihre Art zu schreiben; und die IQueryable<T> würde immer noch LINQ-to-Objects verwenden; Der einzige Zweck (in diesem Szenario) IQueryable<T> über IEnumerable<T> zu verwenden wäre, Ausdrücke aus einem anderen Grund zu verwenden - vielleicht für die dynamic LINQ library.

+0

Wie konvertiert man den anderen Weg? Von IQueryable zu einem DataTable? – MattSlay

+1

Das 'IQueryable ' ist im Wesentlichen eine Ansicht über die Daten. Die ursprüngliche 'DataTable' bleibt noch erhalten. Um * eine * DataTable zu erstellen, sehen Sie vielleicht folgendes: http://stackoverflow.com/questions/545328/datatable-to-generic-list-memory-leak –

+0

@MarcGravell könnte bitte erläutern, wie man die Übersetzung macht? Ich habe versucht IQueryable resultList = (DataSet.Tables [0]). AsEnumerable(). AsQueryable(); Ich habe einen Fehler erhalten: Typ IQueryable kann nicht in Typ IQueryable konvertiert werden. –

1

Take a look here Es scheint, dass ein Anbieter mit Entity Framework für DB2 existiert.

+0

Leider, aufgrund einer schlechten Erfahrung im letzten Jahr, wurde EF für mich ausgeschlossen. Das ist bedauerlich, denn EF ist die Zukunft von MSFT ... – jlembke

1

können Sie so etwas verwenden.

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