首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.ToList().AsQueryable()

使用.ToList().AsQueryable()
EN

Stack Overflow用户
提问于 2011-06-22 03:31:03
回答 2查看 4K关注 0票数 4

我遇到了以(...).ToList().AsQueryable()结尾的linq查询。我分别知道.ToList()和.AsQueryable()的用法。但是,如果两者结合在一起会有什么结果呢?我们什么时候需要把它们组合起来?我希望这个问题不是一个太垃圾的问题。提前谢谢。

第一个查询:

代码语言:javascript
复制
Dim costAmounts = (From t In model.OrderTrades                            
Join o In model.Orders On t.OrdNum Equals o.OrdNum 
Where o.ClientCode = clientNumber And o.BookDate = sysrec.ETicketsBookDate
Group t By t.Buy, t.OrdNum Into Amount = Sum(t.BuyAmount) _
Select OrdNum = OrdNum, Currency = Buy, SellAmount = Amount).ToList().AsQueryable()

第二个查询:

代码语言:javascript
复制
 Dim orders = (From a In costAmounts _
                    Group Join s In settlements On s.Currency Equals a.Currency _
                        And s.OrdNum Equals a.OrdNum Into amounts = Group _
                    From g In amounts.DefaultIfEmpty _
                    Where g Is Nothing OrElse a.SellAmount - g.Paid <> 0 _
                    Select OrdNum = a.OrdNum Distinct).ToList()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-22 03:34:36

您永远不需要将这两者结合起来。

AsQueryable的存在是为了给你提供懒惰的评估特性,ToList完全否定了这一点。

因此,ToList强制对LINQ查询求值,然后将内存中的列表转换为IQueryable,以便允许...对它进行查询。而不是构造查询并仅根据需要获得结果。

票数 5
EN

Stack Overflow用户

发布于 2011-06-22 03:35:36

.ToList()将中断延迟的执行,这通常非常有用(传递可查询对象将延迟执行,但如果传递给多个类或方法,则可能最终实际执行几次)。一旦执行了.AsQueryable(),就可以将结果作为Queryable返回,这可能是必需的。

编辑:如果我们同意在queryable上调用.ToList(),然后传递列表对于某些用途来说是正确的模式(当queryable爆炸成多个变体,每个变体都需要在某个时刻执行时,我可以真正地加速您的应用程序)。如果您在某个时刻中断了延迟执行,那么从那里进行的查询将会更简单、更快--那么稍后调用.AsQueryable()只会达到将结果适合于特定类型(可能是某些api所需的)的目的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6430936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档