Преобразовать набор данных в 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 существует.