我想要筛选出X条记录。我想知道Take()
是如何工作的?
在这个网站上,我找到了这个链接:http://www.hookedonlinq.com/TakeOperator.ashx
它说Take()
“如果源为空,则会抛出ArgumentNullException。”那么我该怎么办呢?我不能保证每次执行Take()
时表中都有记录。
所以我需要先进行计数吗?然后再进行另一个查询以确保有一些记录可以获取吗?
此外,如果我使用Take(2)
但只有1条记录,它会抛出相同的异常吗?
我想要筛选出X条记录。我想知道Take()
是如何工作的?
在这个网站上,我找到了这个链接:http://www.hookedonlinq.com/TakeOperator.ashx
它说Take()
“如果源为空,则会抛出ArgumentNullException。”那么我该怎么办呢?我不能保证每次执行Take()
时表中都有记录。
所以我需要先进行计数吗?然后再进行另一个查询以确保有一些记录可以获取吗?
此外,如果我使用Take(2)
但只有1条记录,它会抛出相同的异常吗?
一个null引用和一个空集合是有区别的。在一个空集合上调用Take没有问题。而且参数指定了最多拿走的数量,因此也可以指定比集合中物品数量更多的数量。
我建议查阅MSDN以获取类似这样的精确细节。
对于Linq to Objects: http://msdn.microsoft.com/en-us/library/bb503062.aspx
对于连接到数据库的Linq:http://msdn.microsoft.com/en-us/library/bb300906.aspx
如果你针对一个对象源(例如:)进行这样的操作,那么就会出现空引用异常:
List<MyObject> myList = null;
myList.Take(5); // this would produce the error, of course
使用 Linq to SQL 时,它会返回您的数据的一个空枚举器,而不是空引用。同样地,如果你试图获取超过可用数量的数据,它只会获取可用数量的数据。我在某些情况下使用这种方法来对数据进行分页,并且当我请求比列表中可用记录数更多的记录时,也经常使用此方法。
null
上的任何方法都会抛出NullReferenceException
异常。如果您将Take作为静态方法调用,则会引发ArgumentNullException异常:List<object> list = null; Enumerable.Take(list, 5);
- knittl如果调用Take方法的对象为空,则会引发异常。你很可能不会遇到空对象,而没有行或少量行不同(我相信你理解语义)。
如果您正在使用Linq to SQL上下文并以以下方式进行查询
Context.MyTable.Where(x => x.ID > 0).Take(2);
在Where
返回零个结果的情况下,您不会遇到空指针异常,因为查询尚未执行,如果只包含1个结果,您最终将只获得1个结果。 Take
限制了返回记录的数量。
在执行Take()之前计算项目数量:
List<string> a = new List<string>();
int count = a.Count > 12 ? 12 : a.Count;
a.Take(count);
Take<TSource>
会枚举source
并返回元素,直到已经返回了count
个元素或者source
中没有更多元素为止。如果count
超过了source
中元素的数量,那么将返回source
的所有元素。" - Nicholas Flees