gpt4 book ai didi

linq - 是否有 IQueryable 通过 DbDataReader 的实现?

转载 作者:行者123 更新时间:2023-11-30 23:57:54 27 4
gpt4 key购买 nike

我有很多使用原始 ADO.NET(DbConnection、DbDataReader 等)的现有代码。我想过渡到对新代码使用 LINQ to SQL,但现在将现有代码和新代码都放在一组统一的 Repository 类之后。

我遇到的一个问题是:我希望 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
}
}

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

关于linq - 是否有 IQueryable 通过 DbDataReader 的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1041405/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com