创建“在哪里”HQL 查询
Posted
技术标签:
【中文标题】创建“在哪里”HQL 查询【英文标题】:Creating a "where in" HQL query 【发布时间】:2011-11-04 11:40:48 【问题描述】:我在编写使用“where in”子句的 HQL 查询时遇到问题。
简化的类如下所示:
class Parent
public virtual Int64 Id get; private set;
public virtual string Name get; private set;
class Child
public virtual Int64 Id get; private set;
public virtual string Name get; private set;
public virtual Parent Parent get; private set;
映射定义如下:
class ParentMap : ClassMap<Parent>
Id(x => x.Id);
Map(x => x.Name);
class ChildMap : ClassMap<Child>
Id(x => x.Id);
Map(x => x.Name);
References(x => x.Parent);
我想获取属于某些Parent
项目的Child
实例,所以我编写了以下代码:
// get children for several parents (a flattened list)
IEnumerable<Parent> parents = GetParents();
// use hql
IQuery q = Session.CreateQuery("from Child as c where c.Parent in (:parents)");
q.SetParameter("parents", parents);
但问题是,我在q.SetParameter
收到以下异常:
[编辑]
我尝试使用q.SetParameter("parents", parents.Select(p => p.Id);
,但我得到了同样的异常。
【问题讨论】:
【参考方案1】:试试这样的:
q.SetParameterList("parents", parents.ToList());
【讨论】:
+1,谢谢,我刚刚在this thread 找到它。parents
在我的例子中是 IEnumerable<Parent>
类型。
+1 表示 SetParameterList
,但为什么是 parents.Split
而不是 parents.ToArray()
??
@stefan:这是我使用的代码的一部分。我猜结果是一样的(假设数据总是正确的)以上是关于创建“在哪里”HQL 查询的主要内容,如果未能解决你的问题,请参考以下文章