c# LINQ如何有效地处理null返回?



所以当我写c# linq语句时,我经常想这样做:

string name = database.table.Where(t=>t.Field1 == row.Field1 && t.Field2 == row.Field).Select(b=> b.Name).FirstOrDefault().ToString();

然而,如果上面的语句没有返回任何东西,那么它就会出错,因为你不能对空值使用。firstordefault()。

所以我通常会这样做:

var listOfNames = database.table.Where(t=>t.Field1 == row.Field1 && t.Field2 == row.Field).Select(b=> b.Name).ToList();

if(listOfNames.Count() > 0 ){
string name =  listOfNames.FirstOrDefault().ToString();
}

上面的代码看起来真的很冗长,我不得不想象在处理潜在的null返回值时有一种更简洁的方法。

任何见解或帮助将不胜感激。谢谢。

您有几种方法:

  1. 不使用ToString(),我猜名称是字符串/varchar已经
string name = database.table
.Where(t=>t.Field1 == row.Field1 && t.Field2 == row.Field)
.Select(b=> b.Name)
.FirstOrDefault()
// name now can be null since default(string) is null
  1. 如果你需要做ToString,那么你可以使用c# 6的特性-空条件(?.)
string name = database.table
.Where(t=>t.Field1 == row.Field1 && t.Field2 == row.Field)
.Select(b=> b.Name)
.FirstOrDefault()?.ToString(); // here ?
// name now can be null
  1. 还考虑空合并(??)操作符
string name = database.table
.Where(t=>t.Field1 == row.Field1 && t.Field2 == row.Field)
.Select(b=> b.Name)
.FirstOrDefault() ?? "some value"
// so if FirstOrDefault returns null then "some value" will be used

合并.Where.FirstOrDefault:

string name = database.table
.FirstOrDefault(t=>t.Field1 == row.Field1 && t.Field2 == row.Field)
?.Name;

相关内容

  • 没有找到相关文章

最新更新