linq System. out. println();当空或少于请求的记录可用时,如何处理?

xzlaal3s  于 2023-05-11  发布在  其他
关注(0)|答案(4)|浏览(123)

我想过滤结果,只取X数量的记录。我想知道Take()是如何工作的?
在这个网站上,我发现:http://www.hookedonlinq.com/TakeOperator.ashx
它说Take()“Throws an ArgumentNullException if source is null.”那么我应该怎么做呢?我不能保证每次执行Take()时,该表中是否会有一些记录。
我是不是得先数数?然后执行另一个查询以确保有一些记录可供抓取?
还有,如果我有一个Take(2),但只有1条记录,它会抛出同样的异常吗?

oogrdqng

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

gj3fmq9x

gj3fmq9x2#

只有当你对一个对象源这样做时,空引用才会异常:

List<MyObject> myList = null;
myList.Take(5); // this would produce the error, of course

当你使用Linq to SQL时,它会返回一个EMPTY枚举器,而不是空引用。同样的道理,如果你试图采取更多的是可用的,它只会占用可用的金额。在某些情况下,我使用这个方法来分页数据,而且在很多情况下,当我请求的记录比列表中可用的记录更多时,我肯定会使用这个方法。

t8e9dugd

t8e9dugd3#

如果调用take的对象为空,take将通过异常。很有可能你不会有一个空对象,没有或更少的行是不一样的(我相信你理解语义)。
如果使用Linq to SQL上下文并以

Context.MyTable.Where(x => x.ID > 0).Take(2);

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

gr8qqesn

gr8qqesn4#

在Take()之前计算项目数:

List<string> a = new List<string>();
            int count = a.Count > 12 ? 12 : a.Count;
            a.Take(count);

相关问题