有IQueryable的超过DbDataReader的实现?(Is there an impleme

2019-06-24 03:17发布

我有很多现有的代码,使用原始ADO.NET(的DbConnection,DbDataReader等)。 我想过渡到使用LINQ to SQL进行新的代码,但是现在把两者的现有的和新的代码背后一套统一的信息库类。

有一个问题我是这样的:我想库类暴露的结果集为IQueryable的<>这是我获得自由与LINQ to SQL的。 如何总结我的现有DbDataReader结果集在一个IQueryable? 我一定要超过DbDataReader从头实现IQueryable的?

注意:我知道LINQ到数据集,但我不使用,因为内存的尺度问题数据集,作为结果集我应对可能会相当大(1000个顺序)。 这意味着,在IQueryable的执行DbDataReader需要的高效性和(即不缓存结果在内存中)。

Answer 1:

我看不到任何好处的实现IQueryable<T> -这意味着更多的功能比实际可用-然而,你可以实现它作为一个IEnumerable<T>很轻松了,需要提醒的是它是一次性的。 迭代器块将是一个合理的选择:

    public static IEnumerable<IDataRecord> AsEnumerable(
        this IDataReader reader)
    {
        while (reader.Read())
        {
            yield return reader; // a bit dangerous
        }
    }

该“有点危险”,是因为主叫方可以将它转换回和滥用它...



文章来源: Is there an implementation of IQueryable over DbDataReader?