是否有通过 DbDataReader 实现 IQueryable 的方法?

2023-12-09

我有很多使用原始 ADO.NET 的现有代码(DbConnection、DbDataReader 等)。我想过渡到使用 LINQ to SQL 来处理新代码,但现在将现有代码和新代码放在一组统一的存储库类后面。

我遇到的一个问题是:我希望 Repository 类将结果集公开为 IQueryable,这是我通过 LINQ to SQL 免费获得的。如何将现有的 DbDataReader 结果集包装在 IQueryable 中?我是否必须从头开始通过 DbDataReader 实现 IQueryable ?

请注意,我知道 LINQ to DataSet,但由于内存规模问题,我不使用 DataSet,因为我处理的结果集可能非常大(1000 的量级)。这意味着 IQueryable over DbDataReader 实现也需要高效(即不要将结果缓存在内存中)。


我看不到实施有任何好处IQueryable<T>- 这表明比实际可用的功能更多 - 但是,您可以将其实现为IEnumerable<T>很容易,但需要注意的是它是一次性的。迭代器块将是一个合理的选择:

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

“有点危险”是因为调用者可以将其抛回并滥用它......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有通过 DbDataReader 实现 IQueryable 的方法? 的相关文章

随机推荐