将数据集转换为IQueryable<T>或IEnumerable<T>

13

由于目前还没有针对DB2的Linq支持(IBM加油啊!),而我想在我的代码中处理IQueryable或IEnumerable,那我该如何将DataTable转换为IQueryable?或者是IEnumerable呢?

我有一个接口和一个类,它们与数据表中的列相匹配...

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

DataTable.Rows不支持.AsQueryable,因为MSFT取消了它,所以我不确定该怎么做。


.AsEnumerable() <= 使用 System.Data; - Krisztián Balla
3个回答

20
table.AsEnumerable()...

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

不过,你需要编写自己的类型转换(Select),并且 IQueryable<T>仍将使用LINQ-to-Objects。在这种情况下,使用 IQueryable<T> 而不是 IEnumerable<T> 的唯一目的是出于其他原因使用表达式,例如动态LINQ库


你如何进行相反的转换?从IQueryable到DataTable? - MattSlay
1
IQueryable<T>本质上是数据的视图,原始的DataTable仍然存在。如果想要创建一个DataTable,可以参考这个链接:https://dev59.com/bkbRa4cB1Zd3GeqP1Y2Q - Marc Gravell
@MarcGravell 能否详细说明如何进行转换?我尝试了IQueryable<T> resultList =(DataSet.Tables[0]).AsEnumerable().AsQueryable();但是出现了错误:无法将类型IQueryable<DataRow>转换为类型IQueryable<T>。 - Rami Sarieddine

2
您可以使用类似以下的方法。
DataSet ds = GetData();
DataTable dt= ds.Tables[0];
var query =
    from row in dt.AsEnumerable() 
    select new IMyData()
    {
        property1= row[0],
        property2= row[1]
    };

0

在这里看看,似乎存在一个使用实体框架连接DB2的提供程序。


不幸的是,由于去年的一次不愉快经历,我已经把EF排除在外了。这很不幸,因为EF是微软的未来... - jlembke
换工作吧 :) - Christian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接