使用 Single 和 SingleOrDefault 之间的逻辑区别是什么?

Unb*_*ble 0 c# asp.net-mvc entity-framework asp.net-mvc-5

我不知道该用在哪里Single,又该用在哪里SingleOrDefault。我理解两者的定义。

单身的:

  1. 它总是返回一行。

  2. 如果没有找到行,我会得到一个异常。

  3. 如果找到多行,我会得到一个异常。

单一或默认:

  1. 它总是返回一行,如果没有找到则返回默认值(What is the meaning of this DEFAULT VALUE").

  2. 如果有多行则异常。

问题1:“它将返回默认值”是什么意思

问题2:什么时候使用Single,什么时候使用SingleOrDefault。

我有一个删除功能,其中有以下代码:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int resumeId)
{
    var r = _context
        .Resumes
        .Where(c => c.ResumeId == resumeId).SingleOrDefault();
    _context.Resumes.Remove(r);
    _context.SaveChanges();

    return RedirectToAction("ResumeCenter");
}
Run Code Online (Sandbox Code Playgroud)

我只是盲目地到处放置SingleOrDefault(我至少期望一个值),请告诉我一个现实世界的场景,何时我应该使用“Single”以及我应该在哪里使用“SingleOrDefault”。

Zoh*_*led 5

正如您所说 - Single()如果没有找到行,则会引发异常。 SingleOrDefault()将返回默认值(引用类型为 null,整数为 0,字符为 \0 等)。

Single()在以下两种情况之一中使用:

  1. 当没有获得行时,这是不应该发生的事情,如果发生了,则意味着出现了问题。
  2. 当您处理值类型(整数、字符等)时,默认值可能是您的值系统中的有效值(例如,如果您正在获取0一个 int 但无法判断它是否是因为您得到了没有回退或者它是一个有效值。

用于SingleOrDefault()任何其他情况。如果未找到该行,您需要将获得的值与其默认值进行比较。

为了进一步阅读,这里有一个关于默认值表达式的 Microsoft 页面的链接