使用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_NUM
是Nullable<global::System.Int32>
的性质。
我得到以下异常
无法强制转换类型"System"。类型'System.Object'可为空' 1'。LINQ to Entities只支持转换EDM基本类型或枚举类型。
我应该如何使用Linq to Entites
中的可空字段?我尝试了Convert.ToInt32
和object.Equals
,但两者都没有工作。
如有任何帮助,不胜感激
在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应该没问题