我在数据库中有一个可为空的字段,在模型中有一个可为空的参数。我尝试以下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();
我收到编译错误:
错误1无法确定条件表达式的类型,因为
'int'和''之间没有隐式转换
它可以正常工作
Username = (i.UserId != null) ? i.AspNetUsers.UserName : String.Empty,
但不能与“ int”一起使用?类型。为什么以及如何正确执行?
最佳答案
Conditional Operator的文档说:-
first_expression和second_expression的类型必须为
相同,否则必须存在从一种类型到另一种类型的隐式转换。
由于i.AspNetUsers.UserName
和String.Empty
是string
键入,因此可以正常工作。现在,您的问题是不言自明的,因为不能将null强制转换为整数类型,您需要使用它:
PersonStatusID = (i.PersonStatus!=null) ? i.PersonStatus.PersonStatusID : 0;
或者相反,如果您需要将其作为整数的Nullable:
PersonStatusID = (i.PersonStatus!=null) ? (int?)i.PersonStatus.PersonStatusID : null;
在这种情况下,
PersonStatusID
的类型应为int?
。关于c# - LINQ和可为空的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29730712/