我想过滤我的结果,使其只接受X条记录。我想知道Take()是如何工作的?
在这个网站上我找到了:http://www.hookedonlinq.com/TakeOperator.ashx
它说Take()“如果ArgumentNullException为空就抛出一个ArgumentNullException”。那么我该怎么做呢?我不能保证每次执行Take()时,该表中都会有一些记录。
那么我是不是得先做个计数呢?然后执行另一个查询,以确保有一些记录可供抓取?
另外,如果I有一个Take(2),但只有1个记录,它会抛出同样的异常吗?
发布于 2009-09-01 18:56:10
空引用和空集合是有区别的。在一个空集合上调用Take是很好的。参数指定了一个最大数量,因此指定的数量也可以超过集合中的项数。
我推荐参考MSDN来获取类似下面这样的精确细节。
对于Linq to Objects:http://msdn.microsoft.com/en-us/library/bb503062.aspx
对于数据库链接:http://msdn.microsoft.com/en-us/library/bb300906.aspx
发布于 2009-09-01 18:56:44
仅当您针对对象源执行此操作时,才会出现空引用异常:
List<MyObject> myList = null;
myList.Take(5); // this would produce the error, of course当你执行Linq to SQL时,它将返回一个空的数据枚举器,而不是一个空引用。出于同样的原因,如果你试图获取比可用更多的东西,它只会占用可用的数量。在某些情况下,我会使用这种方法来对数据进行分页,当然,在很多时候,我会请求比列表可用记录更多的记录。
发布于 2009-09-01 18:58:53
如果调用它的对象为空,则Take将通过一个异常。很有可能你不会有一个空的对象,没有或者更少的行是不一样的(我相信你理解其中的语义)。
如果您正在使用Linq to SQL上下文并以
Context.MyTable.Where(x => x.ID > 0).Take(2); 在Where返回零结果的情况下,您不会得到空异常,因为您的查询还没有被执行,那么在它只包含1个结果的情况下,您最终只会得到一个返回的结果。Take限制了返回的记录数量。
https://stackoverflow.com/questions/1364033
复制相似问题