是否有类似于我们可以使用linq为左外连接与基于方法的查询语法 .
例如
var a = from m in context.MainClass
join r in context.RefClass on m.RefID equals r.ID on joinedent
from j in joinedent.DefaultIfEmpt()
select new { m.Name , j.TypeName }
如果为null,我可以将其转换为基于方法的语法,导航属性为default
var a = context.MainClass.Select(x=> new {
m.Name
m.RefClass.TypeName // here need default if RefClass is null
})
我可以像_797583那样做,但想知道是否有一种正确的方式像上面的linq那样做 .
谢谢
3 回答
只需在DefaultIfEmpty参数中使用新的初始化
希望问题能解决
你能试试
Include
吗?当EF对数据库执行Linq时,m.RefClass.TypeName将返回#null,其中针对对象的相同语句将抛出NullReferenceException .
m.RefClass?.TypeName
应该在两种情况下都返回string.Empty .更新:如上所述?表达式树中不允许使用,但以下方法有效:
对于子引用为null而不是空引用异常的属性,EF表达式将返回#null . 但是,如果以某种方式复制/移动表达式而不是通过EF运行表达式,则检查RefClass的null会更安全 .
在一个奇怪的旁注中,我在测试时遇到了一个有趣的副作用:只有在父和子之间的关系被映射为可选时才能正常工作 . (显然)在我的情况下,我有一个现有的测试关系,设置为“必需”或不可空 . 我更改了模式以使子ID无效,并且它没有抛出任何异常,它只返回没有行