我在数据库中有一个可为空的字段,在模型中有一个可为空的参数。我尝试以下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.UserNameString.Emptystring键入,因此可以正常工作。现在,您的问题是不言自明的,因为不能将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/

10-12 04:40