在LINQ查询中检查null的最佳实践

时间:2017-06-28 19:23:46

标签: c# linq lambda

假设我有一个LINQ查询......

var selectedUser = myDb.Users.Where<User>(u => u.Email == email).Single<User>();

查看我是否收到结果的最佳方式是什么?我只是检查是否selectedUser != null

if (selectedUser != null)
{
  // OK, not null so go ahead and do stuff
}

2 个答案:

答案 0 :(得分:4)

如果没有匹配项,

Single()将抛出异常。

SingleOrDefault()将返回单个元素或默认值。 但是,如果序列中有多个元素,它将抛出异常。

如果你可以选择第一个元素,如果,那么恰好使用FirstOrDefault()就可以了:

var selectedUser = myDb.Users.FirstOrDefault(u => u.Email == email);

然后检查它是否像往常一样为空:

if (selectedUser != null)
{
    // OK, not null so go ahead and do stuff
}

旁注在任何一种情况下,您都不应该需要明确的<T>定义。 Where()子句也是多余的,您可以在FirstOrDefault()Single()SingleOrDefault()等处传递lambda。

答案 1 :(得分:-1)

。如果没有匹配的项目,则会抛出异常。而是使用SingleOrDefault并检查null。