使用 .ToList().AsQueryable()

gma*_*ser 4 linq-to-sql

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

第一个查询:

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()
Run Code Online (Sandbox Code Playgroud)

第二次查询:

 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()
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 5

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

AsQueryable是否可以为您提供惰性评估功能,而这ToList完全否定了。

因此,LINQ 查询被迫由 进行评估ToList,然后,内存中的列表将转换为 anIQueryable以便允许...对其进行查询。而不是构建查询并仅根据需要获取结果。

  • 根据我的经验(公平地说,这是一种相当特殊的工作方式),我经常使用 .ToList().AsQueryable() ,我这样做的原因是 1. ToList() 强制执行查询(v. 对于“强制”执行很有用)从数据库或其他来源拉取并强制将其全部放入 RAM) 2. AsQueryable() 提供使用各种扩展和其他方法的能力,例如 LinqKit 的 .And() / .Or() 3. .ToList() 通常是需要避免像 @gmailusers“LINQ to Entities 无法识别该方法”这样的错误。很抱歉,但 -1 因为“你永远不需要将两者结合起来”是错误的。有时这是必要的/非常明智的。 (4认同)