使用linq到实体选择空值时出错

本文关键字:空值 出错 选择 实体 linq 使用 | 更新日期: 2023-09-27 18:11:45

我使用linq到实体。我试图选择一个nullable Int字段与下面的代码,但我得到Exception

    List<MyClass> myList = myContext.Accounts
            .Where(x => x.ACCOUNT_TYPE_ID == 58 && x.IS_DELETED == 0)
            .Select(x=> new PayorCode
                {
                    Id = x.ID,
                    Payor = x.CODE_NUM + " - "+ x.DESCRIPTION
                }).ToList();


Accounts中,CODE_NUMNullable<global::System.Int32>的性质。

我得到以下异常

无法强制转换类型"System"。类型'System.Object'可为空' 1'。LINQ to Entities只支持转换EDM基本类型或枚举类型。

我应该如何使用Linq to Entites中的可空字段?我尝试了Convert.ToInt32object.Equals,但两者都没有工作。
如有任何帮助,不胜感激

使用linq到实体选择空值时出错

在EF中处理可空整数应该与在正常情况下处理它们没有什么不同。您可以使用.HasValue检查它们是否有一个值,您可以使用.Value直接读取该值,您可以使用??进行空合并。根据在此属性为null的情况下您想要发生的事情,您应该能够执行以下操作:

.Select(x=> new PayorCode
            {
                Id = x.ID,
                Payor = x.CODE_NUM.HasValue 
                            ? x.CODE_NUM.Value + " - "+ x.DESCRIPTION
                            : "CODE_NUM Missing"
            })

或者:

.Select(x=> new PayorCode
            {
                Id = x.ID,
                Payor = (x.CODE_NUM ?? "0") + " - "+ x.DESCRIPTION,
            })

类列表" list "不能与选择中引用的强类型类列表PayorCode一起使用。要么使用"var query =…"与PayorCode一起,或者如果列表与PayorCode相同,那么用MyClass代替PayorCode。所以.Select(x => new MyClass {....}

那么答案2应该没问题