我有以下课程:
class Operation
{
User User_AssignedTo;
ResourceGroup ResourceGroup;
}
class ResourceGroup
{
List<User> UsersCollection;
}
我有方法。它需要用户并返回操作。 这样的事情:
ResourceGroup resourceGroup = null;
query = conn.Session.QueryOver<Operation>()
.JoinAlias(item => item.ResourceGroup, () => resourceGroup)
.Where(item => item.User_AssignedTo.Id == user.Id || resourceGroup.UsersCollection.Contains(userDm));
但我有例外
Unrecognised method call: System.Collections.Generic.ICollection`1[[Mapping.Classes.User, Mapping.Classes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ab89f53b66a52c3]]:Boolean Contains
答案 0 :(得分:1)
Contains
是一个C#函数。在SQL中,我们将使用MyProperty IN (Select ...)
。要使用NHibernate实现这一点,要使用IN子句和内部选择 - 我们可以使用DetachedCriteria
:
文档:15.8. Detached queries and subqueries
有一些详细的例子如何使用它:
注意:我想为您提供更多详细信息,甚至是您的解决方案,一些草案......但问题在于问题的片段。为了能够使用IN
两个部分,应该选择一些 ID(1)ID和2)要比较的ID。 ResourceGroup
缺少ID,很难理解后面的配对表是如何设计的。
但至少DetachedCriteria概念应该给你正确的方向......
答案 1 :(得分:0)
NHibernate并不喜欢&#39; ||&#39;运营商。试试这个:NHIbernate OR Criteria Query
如何进行Or操作的另一个例子: NHibernate JoinAlias query with null test not working