c# – 使用IDbConnection.Query()返回IEnumerable,AsList()比ToList()更好吗?

c# – 使用IDbConnection.Query()返回IEnumerable,AsList()比ToList()更好吗?,第1张

概述我从Marc Gravell(@MarcGravell)读到这个答案: https://stackoverflow.com/a/47790712/5779732 最后一行说: As a minor optimization to your code: prefer AsList() to ToList() to avoid creating a copy. 该语句是关于返回GridReader的Q 我从marc Gravell(@marcGravell)读到这个答案: https://stackoverflow.com/a/47790712/5779732

最后一行说:

As a minor optimization to your code: prefer AsList() to ToList() to avoID creating a copy.

该语句是关于返回GrIDReader的queryMultiple().

在我的理解中,System.linq提供了一个扩展方法IEnumerable.ToList().以下是关于ToList()的Microsoft.

The ToList(IEnumerable) method forces immediate query evaluation and returns a List that contains the query results. You can append this method to your query in order to obtain a cached copy of the query results.

IDbConnection.query()将始终返回IEnumerable或null.在调用代码时可以轻松完成空检查.那么AsList会有什么不同呢?

如果我的理解是正确的,AsList将始终在内部调用ToList,它将创建一个副本.

考虑到这一点,AsList()比使用IDbConnection.query()返回IEnumerable的ToList()更好吗?如是;为什么?

AsList()在内部做什么使得它在这种情况下成为更好的选择?

解决方法 AsList是一种自定义Dapper扩展方法.它所做的就是检查IEnumerable< T>你传递给它的确是List< T>.如果是 – 它返回它,只是转换为List< T>.如果不是 – 它会调用常规ToList.关键是 – ToList()总是创建一个副本,即使你传递给它的是一个列表. AsList()方法避免执行此副本,因此如果不需要此类副本,则非常有用.

在此特定方案中,您具有以下代码:

multipleresult.Read<MerchantProduct>()

其中multipleresult是GrIDReader. Read有缓冲参数,默认为true.当它的真实 – Read将真正返回List< T>,所以通过调用ToList,你将再次复制该列表,没有太多理由.

对于IDbConnection.query()也是如此 – 它也有缓冲参数,默认情况下为true,所以默认情况下它也会返回List< T>.

如果您更喜欢使用ToList() – 您可以将buffered:false传递给query()或Read()以避免创建该附加副本.

总结

以上是内存溢出为你收集整理的c# – 使用IDbConnection.Query()返回IEnumerable,AsList()比ToList()更好吗?全部内容,希望文章能够帮你解决c# – 使用IDbConnection.Query()返回IEnumerable,AsList()比ToList()更好吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1249853.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存