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.UserName
和 String.Empty
是 string
类型,因此它适合您。现在,你的问题是不言自明的,因为 null 不能转换为整数类型,你需要这个:-
PersonStatusID = (i.PersonStatus!=null) ? i.PersonStatus.PersonStatusID : 0;
或者反过来,如果你需要它作为整数的可空值:-
PersonStatusID = (i.PersonStatus!=null) ? (int?)i.PersonStatus.PersonStatusID : null;
在这种情况下,PersonStatusID
应该是 int?
类型。
我在数据库中有一个可为空的字段,在模型中有一个可为空的参数。我尝试以下 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.UserName
和 String.Empty
是 string
类型,因此它适合您。现在,你的问题是不言自明的,因为 null 不能转换为整数类型,你需要这个:-
PersonStatusID = (i.PersonStatus!=null) ? i.PersonStatus.PersonStatusID : 0;
或者反过来,如果你需要它作为整数的可空值:-
PersonStatusID = (i.PersonStatus!=null) ? (int?)i.PersonStatus.PersonStatusID : null;
在这种情况下,PersonStatusID
应该是 int?
类型。