Nhibernate 将零的集合传递到hql请求时要做什么?

Nhibernate 将零的集合传递到hql请求时要做什么?,nhibernate,Nhibernate,我有这个 public List<TableA> Get(Guid Id, List<int> listId) { const string query = "FROM TableA WHERE MyListColumn in (:listId) AND Id in (:Id)"; return session.CreateQuery(query).SetParameterList("listId", listId).Se

我有这个

     public List<TableA> Get(Guid Id, List<int> listId)
    {
        const string query = "FROM TableA WHERE MyListColumn in (:listId) AND Id in (:Id)";
        return session.CreateQuery(query).SetParameterList("listId", listId).SetParameter("Id",Id).List<TableA>().ToList();
    }
当我得到这个错误

“/”应用程序中出现服务器错误。一 空参数列表生成错误 SQL;参数名称'listId'


基于您关于此主题的其他问题,我建议使用QueryOver: 以下查询将使用listId==null和listId.Count==0


我认为IF块是适当的,因为它不是程序逻辑:它是查询生成。


这样说,我个人将查询签名更改为ListId.MyList=:ID为LISTID=1,对于LISTID.COUNT==0,我根本不运行查询:当你知道没有结果会返回时,为什么有往返行程?更重要的是要确保它不为null或空。listId也可以为null,对吗?我不知道有什么更干净的方法可以做到这一点。QueryOver和HQL之间的区别是什么。似乎他们有很多方法来进行查询。就我个人而言,我希望我能用linq做所有的事情,但有些事情我似乎做不好,我可以做它,而不是一次呼叫db,这将是很多

if(listId.Count == 0){..}
public List<TableA> Get(List<int> listId)
{
    return session.QueryOver<TableA>()
            .Where(Restrictions.In(
                Projections.Property<TableA>(e => e.Id), 
                listId ?? (new List<int>() { }))).List().ToList();
}
List<int> idList = new List<int>(){ 1, 2 };

// if idList is null this will still throw an error
var result = session.Query<TableA>()
               .Where(e => idList.Contains(e.Id)).ToList();