繁体   English   中英

带有实体框架的 C# 条件运算符似乎正在评估这两个表达式

[英]C# conditional operator with Entity Framework appears to be evaluating both expressions

我希望有人可以在这里教育我。 我正在构建一个实体框架查询并在我的 where 子句中引用一个可能为空的对象。 我正在尝试使用条件运算符(? 如果我将其从实体框架上下文中拉出,则相同的条件运算符会起作用,即右侧不会被评估并且没有 NRE。

当我将其放入实体框架查询时,不起作用。 显然, w.EquipmentTypeInfo.Identity.EntityKey即使在调试中验证EquipmentTypeInfo为 null 时仍会被评估:

var equipment = context.Equipments.Where(d =>
       d.RouteEquipmentInfoType == w.RouteEquipmentInfoType
    && d.EquipmentTypeInfoEntityKey == (w.EquipmentTypeInfo == null ? null : w.EquipmentTypeInfo.Identity.EntityKey)).FirstOrDefault();

有人可以向我解释为什么条件运算符在 EF 查询的上下文中不起作用吗?

处理 EF where 子句中可能为空的对象的最佳方法是什么?

正如 Parsa 所说,它可能是 Identity(前提是 Identity 是引用类型而不是结构)。 如果 Equipments 可以包含空值,它也可以是 d。

您可以通过使用空条件表达式以及将过滤谓词直接传递给 FirstOrDefault 而不是使用 Where 来简化此操作:

var equipment = context.Equipments.FirstOrDefault(d =>
   d.RouteEquipmentInfoType == w?.RouteEquipmentInfoType && 
   d.EquipmentTypeInfoEntityKey == w?.EquipmentTypeInfo?.Identity?.EntityKey);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM