0

我有以下方法:

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 子句,它工作正常。

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

提前致谢

4

1 回答 1

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
                                      ^^^^^^^                                          ^^^^^^^^^

看看我在哪里标记了问题?要解决此问题,请在除了要连接的最后一个字符串之外的所有字符串的末尾添加一个额外的空格来组成查询,或者使用类似逐字字符串文字的内容。

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"
);
于 2012-07-26T09:30:24.107 回答