我正在使用此hql查询来处理我的过滤器。除宽度(字符串)部分外,查询完美正常。
这是查询,
public IList<ColorGroup> GetDistinctColorGroups(int typeID, int finishID, string width)
{
string queryStr = "Select distinct c from ColorGroup c inner join c.Products p " +
"where p.ShowOnline = 1 ";
if (typeID > 0)
queryStr += " and p.ProductType.ID = " + typeID;
if (finishID > 0)
queryStr += " and p.FinishGroup.ID = " + finishID;
if (width != "")
queryStr += " and p.Size.Width = " + width;
IList<ColorGroup> colors = NHibernateSession.CreateQuery(queryStr).List<ColorGroup>();
return colors;
}
ProductType和Size具有相同的映射和关系。
这是错误;
NHibernate.QueryException:非法 语法近集合:大小[选择 来自.Domain.ColorGroup c的不同c 内联系c.Products p where p.ShowOnline = 1和p.ProductType.ID = 1且p.FinishGroup.ID = 5且p.Size.Width = 4]
有什么想法吗?
编辑:
在这个项目中,我使用了这个linq查询,这是一个非常简单的hql one。所以我不认为这是一个错误的或更根本的错误..
colorOfSerie = (from p in products where p.Size.Width.Equals(width) select p.ColorGroup).Distinct().ToList<ColorGroup>();
答案 0 :(得分:0)
答案 1 :(得分:0)
看起来产品属性“大小”不存在。是“尺寸”还是“ProductSize”或类似的东西?如果删除该条件,查询是否有效?
答案 2 :(得分:0)
我猜你需要在查询中明确地加入Size实体,因为其他两个表(ProductType,FinishGroup)使用它们的主键进行比较我猜它可能就是为什么它有效? (因为,他们可能是“属于”关系,这意味着他们的ID实际上在产品表中。)