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

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

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

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

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

3 ответа

Решение
table.AsEnumerable()...

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

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

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

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

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

Другие вопросы по тегам