Linq FirstOrDefault

Nat*_*Pet 8 linq

我有以下LINQ查询:

    Manager mngr = (from tr in DataContext.Manager
                    where tr.Name = "Jones").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

我怎样才能检查查询是否确实返回了1条记录,因为我无法做到.Count来获取计数.

Jef*_*ado 14

首先,这不是一个有效的查询.使用查询语法(from blah in blah ...)时,必须有一个select子句.它应该更像是:

var manager =
    (from n in DataContext.Manager
    where n.Name == "Jones"
    select n).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

要回答您的问题,调用FirstOrDefault()查询将返回查询的第一个结果或类型的默认值(null在这种情况下很可能).对于您的目标,这将不是一个充分的用途,因为查询可能包含多个结果.

如果您希望验证查询仅返回单个结果,则应使用该SingleOrDefault()方法.它将返回查询生成的一个项,null如果为空则返回默认值,如果有多个项则返回异常.

如果您不想抛出异常,可能更容易将前两个结果放入列表并验证您只有一个.

var managers =
    (from m in DataContext.Manager
    where m.Name == "Jones"
    select m).Take(2).ToList();
if (managers.Count == 1)
{
    // success!
    var manager = managers.First();
    // do something with manager
}
else
{
    // error
}
Run Code Online (Sandbox Code Playgroud)