Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么nhibernate LINQ不支持简单的外部联接(给定外部联接表上的where子句)?_C#_Sql Server_Linq_Nhibernate - Fatal编程技术网

C# 为什么nhibernate LINQ不支持简单的外部联接(给定外部联接表上的where子句)?

C# 为什么nhibernate LINQ不支持简单的外部联接(给定外部联接表上的where子句)?,c#,sql-server,linq,nhibernate,C#,Sql Server,Linq,Nhibernate,我有一张桌子和一张桌子 tableA有一个B_Id属性 此查询工作正常: IEnumerable<A> a = Session.Query<A>().Fetch(r=>r.B); 但我想要的是: IEnumerable<A> a = Session.Query<A>().Where(r=>r.B.Active).Fetch(r=>r.B); 似乎当我这样做时,它不再进行简单的外部联接,如果表B中没有活动记录,我就不会得到任

我有一张桌子和一张桌子

tableA有一个B_Id属性

此查询工作正常:

 IEnumerable<A> a = Session.Query<A>().Fetch(r=>r.B);
但我想要的是:

 IEnumerable<A> a = Session.Query<A>().Where(r=>r.B.Active).Fetch(r=>r.B);
似乎当我这样做时,它不再进行简单的外部联接,如果表B中没有活动记录,我就不会得到任何结果

我想做一个纯outerjoin,它仍然会给我结果,但实体的B属性为null

nhibernate LINQ是否支持将where子句放在外部联接表上的功能???

猜测:。where=>a.B==null | | a.B.Active

一个想法:您正在尝试选择将处于未知状态的实例。在B==null和B.Active==false的实例之间,NHibernate应该如何区别

如果有效的话,这两个函数都将返回B的null值,而A将填充一个null引用。如果您再次保存一个,会发生什么?对B的引用是否应设置为null?这将在B.Active==false时删除引用。它应该保持原样吗?这将使NHibernate存储一个不代表您的域对象的状态。

根据它,它显然不受支持,您必须使用HQL


至于原因,我推测作者们计划添加它,但优先级更高。就我个人而言,我认为这是一项关键功能。

你能告诉我们执行的sql语句和要执行的sql语句吗?@Simon Svensson-很简单,上面的代码不在连接外部,所以如果没有B,它就不会返回行。Simon Svensson-这不是外部连接的基础吗。显示一个表中的所有记录,无论另一个表是否具有有效的recordYes,但这如何应用于域模型,域模型需要知道它对B的引用是否为null,或者它是否为null只是因为没有与筛选器匹配的B?底层查询没有告诉NHibernate任何有关这方面的信息。@Simon Svensson-那么,在这种情况下,是否有必要编写一个带有where子句的outerjoin,与完全不返回任何记录相比,该子句在该引用中将返回null?猜测过滤器生成了什么样的sql?我猜在上面的投影会起作用。@Simon Svensson-你说在上面的投影是什么意思??