C# 使用包含时NHibernate查询中出现异常
我有以下课程:C# 使用包含时NHibernate查询中出现异常,c#,nhibernate,queryover,C#,Nhibernate,Queryover,我有以下课程: class Operation { User User_AssignedTo; ResourceGroup ResourceGroup; } class ResourceGroup { List<User> UsersCollection; } NHibernate不喜欢“| |”运算符。试试这个: 如何执行Or操作的另一个示例: NHibernate不喜欢“| |”运算符。试试这个: 如何执行Or操作的另一个示例: 包含的是一个C#函数
class Operation
{
User User_AssignedTo;
ResourceGroup ResourceGroup;
}
class ResourceGroup
{
List<User> UsersCollection;
}
NHibernate不喜欢“| |”运算符。试试这个: 如何执行Or操作的另一个示例:
NHibernate不喜欢“| |”运算符。试试这个: 如何执行Or操作的另一个示例:
包含的
是一个C#函数。在SQL中,我们将使用(Select…
中的MyProperty。为了使用NHibernate实现这一点,我们可以使用DetachedCriteria
:
文件:
下面有一些详细的示例说明如何使用它:
- (例如传呼)
- (例如,通过选择最大值(id)进行过滤)
注:我想为您提供更多的细节,甚至是您的解决方案,一些草稿。。但问题在于问题中的片段。要能够在
中使用,这两个部分都应该有一些ID(1)要选择的ID和2)要比较的ID)ResourceGroup
缺少ID,很难理解后面的配对表是如何设计的
但至少DetachedCriteria概念应该为您提供正确的方向…包含的是一个C#函数。在SQL中,我们将使用(Select…
中的MyProperty。为了使用NHibernate实现这一点,我们可以使用DetachedCriteria
:
文件:
下面有一些详细的示例说明如何使用它:
- (例如传呼)
- (例如,通过选择最大值(id)进行过滤)
注:我想为您提供更多的细节,甚至是您的解决方案,一些草稿。。但问题在于问题中的片段。要能够在
中使用,这两个部分都应该有一些ID(1)要选择的ID和2)要比较的ID)ResourceGroup
缺少ID,很难理解后面的配对表是如何设计的
但至少DetachedCriteria概念应该为您提供正确的方向…我不知道如何使用Hibernate,但我想问题可能是它无法将Contains()
转换为SQL查询。你能使用类似于resourceGroup.UsersCollection.Any(u=>u.ID==userDm.ID)
的东西吗?我试过了,但我得到了相同的异常,但对于AnyNHibernate,它不喜欢“| |”操作符。试试这个:[[1]:你能展示一下你用Any()
尝试过的方法吗?@Linus:Any
在这里不起作用。QueryOver被翻译成SQL,。Any
是QueryOver不知道如何转换的方法。我不知道NHibernate,但我想问题可能是它无法翻译包含()
到SQL查询中。您是否可以使用类似于resourceGroup.UsersCollection.Any(u=>u.ID==userDm.ID)
?我尝试过,但得到了相同的异常,但对于AnyNHibernate,它不喜欢“| |”运算符。尝试一下:[[1]:您能展示一下您使用Any()尝试过的内容吗
?@Linus:任何
在这里都不起作用。QueryOver被翻译成SQL,。任何
都是QueryOver不知道如何转换的方法。但是我如何使用resourceGroup.UsersCollection.Contains(userDm)在此解决方案中?UsersCollection是另一个表吗?如果是,您将需要另一个joinalias和join但是如何在此解决方案中使用resourceGroup.UsersCollection.Contains(userDm)?UsersCollection是另一个表吗?如果是,您将需要另一个joinalias和join
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