【问题标题】:LINQ and nullable parameterLINQ 和可为空的参数
【发布时间】:2015-04-19 13:48:51
【问题描述】:

我在数据库中有一个可以为空的字段,在模型中有一个可以为空的参数。我尝试以下 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?”类型。为什么以及如何正确地做到这一点?

【问题讨论】:

  • 这与 LINQ 无关。这是一个编译器错误。这里 90% 的代码不需要演示问题。
  • 你不能(int?)PersonStatusID = (i.PersonStatus!=null) ? i.PersonStatus.PersonStatusID : null 吗?
  • 不能。而且 PersonStatusID 已经有类型“int?”

标签: c# linq nullable


【解决方案1】:

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? 类型。

【讨论】:

  • 只是一个加法,他也可以将其转换为nullable 类型。
  • @JenishRabadiya - 是的,两种方式都可能,但这完全取决于PersonStatusID的数据类型
猜你喜欢
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 2010-10-16
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
相关资源
最近更新 更多