我想过滤结果,只取X数量的记录。我想知道Take()
是如何工作的?
在这个网站上,我发现:http://www.hookedonlinq.com/TakeOperator.ashx
它说Take()
“Throws an ArgumentNullException if source is null.”那么我应该怎么做呢?我不能保证每次执行Take()
时,该表中是否会有一些记录。
我是不是得先数数?然后执行另一个查询以确保有一些记录可供抓取?
还有,如果我有一个Take(2)
,但只有1条记录,它会抛出同样的异常吗?
4条答案
按热度按时间oogrdqng1#
null引用和空集合之间是有区别的。在一个空集合上调用Take是可以的。并且参数指定了最大数量,因此可以指定超过集合中的项目数。
我建议参考MSDN以获得类似的精确细节。
对于Linq to Objects:http://msdn.microsoft.com/en-us/library/bb503062.aspx
对于链接到数据库:http://msdn.microsoft.com/en-us/library/bb300906.aspx
gj3fmq9x2#
只有当你对一个对象源这样做时,空引用才会异常:
当你使用Linq to SQL时,它会返回一个EMPTY枚举器,而不是空引用。同样的道理,如果你试图采取更多的是可用的,它只会占用可用的金额。在某些情况下,我使用这个方法来分页数据,而且在很多情况下,当我请求的记录比列表中可用的记录更多时,我肯定会使用这个方法。
t8e9dugd3#
如果调用take的对象为空,take将通过异常。很有可能你不会有一个空对象,没有或更少的行是不一样的(我相信你理解语义)。
如果使用Linq to SQL上下文并以
在
Where
返回零结果的情况下,你不会得到一个null异常,因为你的查询还没有执行,那么在它只包含1个结果的情况下,你最终只会得到1个结果。Take
限制返回的记录数量。gr8qqesn4#
在Take()之前计算项目数: