IQuery未按预期运行

时间:2012-07-26 09:04:03

标签: c# hibernate

我有以下方法:

ServiceType GetWithValidServices(long ServiceTypeID);

以及以下功能:

public ServiceType GetWithValidServices(long ServiceTypeID)
    {
        IQuery query = CurrentSession.CreateQuery("select dl.ServiceType from Service as dl"
         + "where dl.ServiceType.ID = :id and dl.IsValid = true"
         + "order by dl.HavePriority desc");

        query.SetInt64("id", ServiceTypeID);

        var dlArt = query.UniqueResult<ServiceType>();
        return dlArt;
    }

在下面的方法中,我调用上面提到的函数:

 public ServiceCollection GetService(long ServiceTypeID)
    {

        ServiceType d = DomainToWebgridMapper.GetWebgridServiceType(DaoFactory.Instance.ServiceTypeDao.GetWithValidService(ServiceTypeID));

        return d.Service;
    }

我的问题是查询运行不正常。我可以看到服务但是dl.IsValid没有运行的过滤器,他也没有按优先顺序排序。

我在其他一些方法中使用where子句,并且它工作正常。

我不知道这里出了什么问题。也许有人可以帮助我。

提前致谢

1 个答案:

答案 0 :(得分:0)

我想我知道你的问题是什么;它与你如何连接字符串以创建查询有关。考虑一下:

string query = "select dl.ServiceType from Service as dl"
     + "where dl.ServiceType.ID = :id and dl.IsValid = true"
     + "order by dl.HavePriority desc";

因为你没有在字符串的开头/结尾插入任何空格或换行符,所以你的查询会变成这样:

select dl.ServiceType from Service as dlwhere dl.ServiceType.ID = :id and dl.IsValid = trueorder by dl.HavePriority desc
                                      ^^^^^^^                                          ^^^^^^^^^

看看我在哪里标出了问题?要解决此问题,请在所有内容的末尾添加一个额外的空格,但要连接的最后一个字符串构成查询,或使用类似verbatim string literal的内容。

IQuery query = CurrentSession.CreateQuery(
    "select dl.ServiceType from Service as dl " +
    "where dl.ServiceType.ID = :id and dl.IsValid = true " +
    "order by dl.HavePriority desc"
);