首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq Take()问题

Linq Take()问题
EN

Stack Overflow用户
提问于 2009-09-01 18:52:41
回答 4查看 39.5K关注 0票数 33

我想过滤我的结果,使其只接受X条记录。我想知道Take()是如何工作的?

在这个网站上我找到了:http://www.hookedonlinq.com/TakeOperator.ashx

它说Take()“如果ArgumentNullException为空就抛出一个ArgumentNullException”。那么我该怎么做呢?我不能保证每次执行Take()时,该表中都会有一些记录。

那么我是不是得先做个计数呢?然后执行另一个查询,以确保有一些记录可供抓取?

另外,如果I有一个Take(2),但只有1个记录,它会抛出同样的异常吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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

票数 60
EN

Stack Overflow用户

发布于 2009-09-01 18:56:44

仅当您针对对象源执行此操作时,才会出现空引用异常:

代码语言:javascript
复制
List<MyObject> myList = null;
myList.Take(5); // this would produce the error, of course

当你执行Linq to SQL时,它将返回一个空的数据枚举器,而不是一个空引用。出于同样的原因,如果你试图获取比可用更多的东西,它只会占用可用的数量。在某些情况下,我会使用这种方法来对数据进行分页,当然,在很多时候,我会请求比列表可用记录更多的记录。

票数 14
EN

Stack Overflow用户

发布于 2009-09-01 18:58:53

如果调用它的对象为空,则Take将通过一个异常。很有可能你不会有一个空的对象,没有或者更少的行是不一样的(我相信你理解其中的语义)。

如果您正在使用Linq to SQL上下文并以

代码语言:javascript
复制
Context.MyTable.Where(x => x.ID > 0).Take(2);  

Where返回零结果的情况下,您不会得到空异常,因为您的查询还没有被执行,那么在它只包含1个结果的情况下,您最终只会得到一个返回的结果。Take限制了返回的记录数量。

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

https://stackoverflow.com/questions/1364033

复制
相关文章

相似问题

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