何时使用。首先以及何时使用.FirstOrDefault与LINQ?

我已经四处搜索,并且还没有真正找到明确的答案,以便何时使用.First以及何时想要使用带有LINQ的.FirstOrDefault

  • 你想什么时候使用.First ? 只有当你想要捕捉异常,如果返回没有结果?

    var result = List.Where(x => x == "foo").First();
    
  • 你想什么时候使用.FirstOrDefault ? 如果你总是想要默认类型,如果没有结果?

    var result = List.Where(x => x == "foo").FirstOrDefault();
    
  • 就此而言,Take呢?

    var result = List.Where(x => x == "foo").Take(1);
    

  • 当我知道或期望序列至少有一个元素时,我会使用First() 。 换句话说,当这是序列为空的例外事件时。

    当你知道你需要检查是否有元素时,使用FirstOrDefault() 。 换句话说,当序列是空的是合法的。 您不应该依赖于检查的异常处理。 (这是不好的做法,可能会损害性能)。

    最后,之间的差异First()Take()First()返回元素本身,而Take()返回包含恰好一个要素元素的序列。 (如果你传递1作为参数)。


    当没有结果时, .First会抛出异常。 .FirstOrDefault不会,它只会返回null(引用类型)或值类型的默认值。 (例如0代表一个int)。这里的问题不是当你想要默认类型,而是更多:你是否愿意处理异常或处理默认值? 由于异常应该例外,如果您不确定是否要从查询中获取结果,则首选FirstOrDefault 。 如果逻辑上数据应该在那里,可以考虑异常处理。

    Skip()Take()通常用于在结果中设置分页。 (如显示前10个结果,下一个10页等等)

    希望这可以帮助。


    如果没有要返回的行,则First()将抛出异常,而.FirstOrDefault()将返回默认值(对于所有引用类型为NULL )。

    所以如果你准备好并愿意处理可能的异常, .First()很好。 如果您更愿意检查!= null的返回值,那么.FirstOrDefault()是您更好的选择。

    但我想这也是个人偏好。 使用任何一种对您更有意义的方法,并更好地适应您的编码风格。

    链接地址: http://www.djcxy.com/p/5853.html

    上一篇: When to use .First and when to use .FirstOrDefault with LINQ?

    下一篇: Multiple "order by" in LINQ