C# Lambda表达式内部??(如果是快捷方式)运算符

C# Lambda表达式内部??(如果是快捷方式)运算符,c#,if-statement,lambda,C#,If Statement,Lambda,我喜欢短小的代码,所以最近我尝试将if语句和Linq查询与lambda表达式放在一行中 是否可以执行以下操作: db.Users.First(x => x.UserId == providedId)??x.SomeUsefullField 若并没有找到用户,那个么它应该返回null,若用户确实存在,那个么它应该返回某个字段的值 是否可以不首先获取用户,然后像这样获取字段值: var user = db.Users.First(x => x.UserId == providedId)

我喜欢短小的代码,所以最近我尝试将if语句和Linq查询与lambda表达式放在一行中

是否可以执行以下操作:

db.Users.First(x => x.UserId == providedId)??x.SomeUsefullField
若并没有找到用户,那个么它应该返回null,若用户确实存在,那个么它应该返回某个字段的值

是否可以不首先获取用户,然后像这样获取字段值:

var user = db.Users.First(x => x.UserId == providedId);
var fieldValue = user.SomeUsefullField;

感谢您提供可能的解决方案和知识共享。

是的,您可以使用空传播运算符:

var userField = db.Users.FirstOrDefault(x => x.UserId == providedId)?.SomeUsefullField;

这里重要的是使用FirstOrDefault,当找不到匹配项时,它将返回null。然后使用?。要仅在表达式不返回null时获取SomeUsefullField属性。

是,可以使用null传播运算符:

var userField = db.Users.FirstOrDefault(x => x.UserId == providedId)?.SomeUsefullField;

这里重要的是使用FirstOrDefault,当找不到匹配项时,它将返回null。然后使用?。仅在表达式不返回null时获取SomeUsefullField属性。

又一个c“创新”导致代码可读性降低!事实上,并不是每个人都对这些改进感到满意,但是我确实喜欢在简单的条件下使用它@当计时器允许时,MitchWheatThanks将标记为正确答案。不幸的是,我需要在该项目中使用C5,所以不能使用该方法。但当我们转到下一个版本的C时,我会记住这个方法。关于代码可读性…有时有非常短的封装方法,名称非常好,只做一件简单的事情,所以可以将其缩短。有时我将每个变量放在单独的行中,以提供流的更多可视化。这是另一个c“创新”,导致代码可读性较差!事实上,并不是每个人都对这些改进感到满意,但是我确实喜欢在简单的条件下使用它@当计时器允许时,MitchWheatThanks将标记为正确答案。不幸的是,我需要在该项目中使用C5,所以不能使用该方法。但当我们转到下一个版本的C时,我会记住这个方法。关于代码可读性…有时有非常短的封装方法,名称非常好,只做一件简单的事情,所以可以将其缩短。有时我把每个变量放在单独的行中,以提供更多关于流的可视化。