我有很多使用原始 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(使用前将#替换为@)