[英]C# LINQ How to efficiently deal with a null return?
So when I'm writing C# linq statements I often would like to do something like this:所以当我写 C# linq 语句时,我经常想做这样的事情:
string name = database.table.Where(t=>t.Field1 == row.Field1 && t.Field2 == row.Field).Select(b=> b.Name).FirstOrDefault().ToString();
However if the statement above doesn't return anything then it errors because you can't use.FirstOrDefault() on a null value.但是,如果上面的语句没有返回任何内容,那么它会出错,因为您不能在 null 值上使用.FirstOrDefault()。
So what I usually end up doing instead is something like below:所以我通常最终会做的是如下所示:
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();
}
The code above just seems really verbose and I have to imagine there is a much cleaner way of doing this while dealing with a potential null return value.上面的代码看起来真的很冗长,我不得不想象在处理潜在的 null 返回值时有一种更简洁的方法。
Any insight or help would be appreciated.任何见解或帮助将不胜感激。 Thanks.谢谢。
You have a few ways:你有几种方法:
ToString()
I guess Name is string/varchar already不要使用ToString()
我猜 Name 已经是 string/varcharstring 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
ToString
then you can use C# 6 features – Null-conditional (?.)如果你需要做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
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
Combine the .Where
and .FirstOrDefault
:结合.Where
和.FirstOrDefault
:
string name = database.table
.FirstOrDefault(t=>t.Field1 == row.Field1 && t.Field2 == row.Field)
?.Name;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.