Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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# 查询版本:选择。。。where属性位于(…)_C#_.net_Nhibernate_Queryover_Nhibernate Criteria - Fatal编程技术网

C# 查询版本:选择。。。where属性位于(…)

C# 查询版本:选择。。。where属性位于(…),c#,.net,nhibernate,queryover,nhibernate-criteria,C#,.net,Nhibernate,Queryover,Nhibernate Criteria,我尝试使用queryover表示以下sql: select * from Table1 t1 where t1.foreign_key in (select t2.Id from Table2 t2 where (...)) 因此,我为内部select语句创建了一个子查询,如下所示: var sq = QueryOver.Of<Table2>().Where(...).Select(c => c.Id); var query = QueryOver.Of<Table

我尝试使用queryover表示以下sql:

select * from Table1 t1 where t1.foreign_key in (select t2.Id from Table2 t2 where (...))
因此,我为内部select语句创建了一个子查询,如下所示:

 var sq = QueryOver.Of<Table2>().Where(...).Select(c => c.Id);
var query = QueryOver.Of<Table1>().WithSubquery.
    WhereProperty(t1 = t1.foreign_key).IsIn(contactSubQuery);
var sq=QueryOver.Of()。其中(…).Select(c=>c.Id);
但是,当我无法在以下查询中使用此子查询时:

var query = QueryOver.Of<Table1>().WithSubquery.
 WhereProperty(t1 = t1.foreign_key).In(contactSubQuery);
var query=QueryOver.Of().WithSubquery。
WhereProperty(t1=t1.foreign_key).In(contactSubQuery);
我认为问题在于QueryOver希望contactSubQuery中的Table1上有一个子查询,而不是Table2上的子查询,但是我无法访问Table2所需的属性。在一个类似的例子中(使用JoinAlias)解决了一个问题,但我看不出如何将该解决方案应用到我的案例中。谢谢你的帮助

解决方案:

非常感谢@Radim,你几乎是对的。我已经在用了

Queryover.Of<T>() 
Queryover.Of()
在查询中,但问题是我将其分配给了IQueryOver变量(因为我们公司没有var关键字styleguide)。在我把它分配给var之后,它被编译了。因为我根本没有想到这会导致问题,所以我将问题中的每个变量简化为var,所以发布的代码实际上应该已经运行了lol。。。我检查了类型并简单地将查询更改为(根据无var规则):

QueryOver=QueryOver.Of()
.带subquery
.WhereProperty(t1=>t1.外键)
//无法编译,因为传递已结束,
//不是询问者
.In(子查询)
以前我在哪里

IQueryOver<Table1, Table1> = ...
IQueryOver=。。。

再次感谢你的帮助

就快到了,只是语法不是这样的:

 var sq = QueryOver.Of<Table2>().Where(...).Select(c => c.Id);
var query = QueryOver.Of<Table1>().WithSubquery.
    WhereProperty(t1 = t1.foreign_key).IsIn(contactSubQuery);
.In()
是返回结果“
QueryOverSubqueryPropertyBuilderBase
”(调用
.WhereProperty()
的结果)的方法

另外,请确保在(子查询)中传递到
.In的参数是
QueryOver.Of()
。例如,这是错误的:

var subquery = session.QueryOver<T>(); // it is named subquery
// but it is not of a type QueryOver<T>, but of a type
// IQueryOver<T, T>
// which is not what is expected here

 var query = QueryOver.Of<Table1>()
            .WithSubquery
               .WhereProperty(t1 => t1.foreign_key)
               // won't compile, because passed is IQueryOver<T,T>, 
               // not the QueryOver<U>   
               .In(subquery)
            ...
var subquery=session.QueryOver();//它被命名为子查询
//但它不是QueryOver类型,而是
//伊奎里奥弗
//这不是这里所期望的
var query=QueryOver.Of()
.带subquery
.WhereProperty(t1=>t1.外键)
//无法编译,因为传递已结束,
//不是询问者
.In(子查询)
...
这将产生:


错误1方法“
NHibernate.criteria.Lambda.QueryOverSubqueryBuilderBaseI”的类型参数可以看到,您已经更新了问题,因此我的答案现在可能不准确。但无论如何,如图所示,我们可以根据自己的喜好嵌套子查询。然后语法还是一样的。。。有帮助吗?还是我错过了你真正的问题?我是sry,之所以使用IsIn,是因为我尝试了它,并从我的解决方案中复制了它。但是,仅使用.In()仍然无法编译:编译器告诉我类似于:“方法TReturn(…)的类型参数。QueryOverSubqueryPropertyBuilderBase.In(QueryOver)无法从用法推断。请尝试显式指定参数”。我想可能是子查询中的整数/ID列表转换错误,或者在另一个类型为B的查询中使用类型为a的子查询时出现问题。我猜您传递的是
session.QueryOver
,而不是
QueryOver.of
。我用更多的解释更新了我的答案。我相信我们很接近;)
var subquery = session.QueryOver<T>(); // it is named subquery
// but it is not of a type QueryOver<T>, but of a type
// IQueryOver<T, T>
// which is not what is expected here

 var query = QueryOver.Of<Table1>()
            .WithSubquery
               .WhereProperty(t1 => t1.foreign_key)
               // won't compile, because passed is IQueryOver<T,T>, 
               // not the QueryOver<U>   
               .In(subquery)
            ...