linq加入null

时间:2011-01-11 20:44:16

标签: linq

Single和SingleOrDefault有什么区别?

感谢。

5 个答案:

答案 0 :(得分:4)

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

    如果找不到元素,
  • Single会抛出异常。
  • 如果找不到任何元素,
  • SingleOrDefault将返回值default(T)。对于引用类型和nullables,默认值为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 :(得分:3)

  

返回满足指定条件的序列中唯一的元素,如果存在多个此类元素,则抛出异常。

单人或默认:

  

返回序列的唯一元素,如果序列为空,则返回默认值;如果序列中有多个元素,则此方法抛出异常。

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

答案 2 :(得分:1)

如果查询的结果不是单个结果,则单个将抛出异常。

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

如果有多个结果,则会抛出异常。 SingleOrDefault(我假设你的意思是SingleOrDefault而不是SingleifDefault)如果有多个结果,将返回null。