Преобразование набора данных в IQueryable <T> или IEnumerable <T>

Так как Linq для DB2 еще нет (c'mon IBM!), и я хочу иметь дело с IQueryables или IEnumerables в своем коде, как бы преобразовать DataTable в IQueryable? Или IEnumerable?

У меня есть интерфейс и класс, который соответствует столбцам в datatable...

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

DataTable.Rows не поддерживает .AsQueryable, так как MSFT дернул его, поэтому я не уверен, что делать здесь.

Ответ 1

table.AsEnumerable()...

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

Однако вам нужно написать свой собственный перевод (Select) в ваш тип; и IQueryable<T> все равно будет использовать LINQ-to-Objects; единственной целью (в этом случае) использования IQueryable<T> over IEnumerable<T> было бы использование выражений по какой-то другой причине - возможно, для динамической библиотеки LINQ .

Ответ 2

Посмотрите здесь, кажется, что поставщик с инфраструктурой сущностей для DB2 существует.

Ответ 3

вы можете использовать что-то вроде этого.

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