2011-01-11 80 views

回答

4

区别在于它们如何处理空序列。

  • Single如果找不到元素,则会引发异常。如果找不到元素,则返回值default(T)。对于引用类型和可空值,默认值为null。对于不可为空的值类型,它是0或类似的。

FirstFirstOrDefault方法也有关系。以下是表格中的所有四个:

 
method   no records multiple records 
--------------------------------------------- 
Single   exception exception  
SingleOrDefault default(T) exception  
First   exception first record  
FirstOrDefault default(T) first record  

所有这些方法也有一个重载谓词。

另一个相关的方法是DefaultIfEmpty,它允许您指定如果序列为空时默认值应该是什么,而不是仅仅使用该类型的默认值。

+1

`SingleOrDefault`返回可能为'null'的默认(T)`,但例如, `int`将会是'0' – dss539 2011-01-11 20:53:31

3

单身:

返回满足指定条件的序列的唯一元素,并且如果多于一个这样的元素存在抛出异常。

单或默认值:

返回序列的唯一元件,或者如果序列是空的默认值;如果序列中有多个元素,则此方法会引发异常。

因此,如果您不希望该属性/列接受NULL,则可以使用SingleOrDefault来使用默认值填充属性/列。

1

单个将抛出一个异常,如果除了查询的单个结果以外的任何东西。

如果您的查询有多个结果,则SingleOrDefault只会抛出异常。如果没有结果,您将返回一个默认值(通常为null)。

0

如果有多个结果,则单个引发异常。 SingleOrDefault(我假设你的意思SingleOrDefault不SingleifDefault)将返回null,如果有多个结果。

1

当在Linq连接中使用时,它与SQL中的外连接有点类似。