LINQ 和可空参数

LINQ and nullable parameter

我在数据库中有一个可为空的字段,在模型中有一个可为空的参数。我尝试以下 LINQ to Entities 查询:

        EditPersonViewModel model = (from i in db.Person
            where i.PersonID == id.Value
            select new EditPersonViewModel()
                {
                    PersonID = i.PersonID,
                    Fullname = i.Fullname,
                    Comment = i.Comment,
                    Username = (i.UserId != null) ? i.AspNetUsers.UserName : String.Empty,
                    // this is parameter has type "int?"
                    PersonStatusID = (i.PersonStatus!=null) ? i.PersonStatus.PersonStatusID : null
                }).FirstOrDefault();

我收到编译错误:

Error 1 Type of conditional expression cannot be determined because there is no implicit conversion between 'int' and ''

配合使用效果很好
Username = (i.UserId != null) ? i.AspNetUsers.UserName : String.Empty,

但不适用于 "int?" 类型。为什么以及如何正确地做到这一点?

Conditional Operator 的文档说:-

Either the type of first_expression and second_expression must be the same, or an implicit conversion must exist from one type to the other.

由于 i.AspNetUsers.UserNameString.Emptystring 类型,因此它适合您。现在,你的问题是不言自明的,因为 null 不能转换为整数类型,你需要这个:-

PersonStatusID = (i.PersonStatus!=null) ? i.PersonStatus.PersonStatusID : 0;

或者反过来,如果你需要它作为整数的可空值:-

PersonStatusID = (i.PersonStatus!=null) ? (int?)i.PersonStatus.PersonStatusID : null;
在这种情况下,

PersonStatusID 应该是 int? 类型。