最后一行说:
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()在内部做什么使得它在这种情况下成为更好的选择?
解决方法
在此特定方案中,您具有以下代码:
multipleresult.Read<MerchantProduct>()
其中multipleresult是GridReader. Read有缓冲参数,默认为true.当它的真实 – Read将真正返回List< T>,所以通过调用ToList,你将再次复制该列表,没有太多理由.
对于IDbConnection.Query()也是如此 – 它也有缓冲参数,默认情况下为true,所以默认情况下它也会返回List< T>.
如果您更喜欢使用ToList() – 您可以将buffered:false传递给Query()或Read()以避免创建该附加副本.