NHibernate从(集合)中的COLUMN删除

ran*_*oms 3 c# sql nhibernate

我试图where column in (collection)使用以下方法从表中删除行:

public void DeleteRows(int parentId, List<int> years)
{
    var yearsAsCommaSeperatedString = ListToCommaSeperatedString(years);
    const string query = "DELETE FROM TABLE t WHERE t.PARENT_ID=:Parent AND t.YEAR in(:yearList)";
    Session
            .CreateSQLQuery(query)
            .SetParameter("Parent", parentId)
            .SetParameter("yearList", yearsAsCommaSeperatedString)
            .ExecuteUpdate();
}

private static string ListToCommaSeperatedString(IEnumerable<int> ints)
{
    var aggregate = ints.Aggregate("", (current, i) => current + (i + ", "));
    return aggregate.Substring(0, aggregate.LastIndexOf(",", StringComparison.Ordinal));
}
Run Code Online (Sandbox Code Playgroud)

问题是这yearsAsCommaSeperatedString是一个字符串,因此db无法解释它的数字.我也尝试添加整数列表作为参数,但NHibernate不知道如何处理它.

我如何使用where in(collection)CreateSQLQuery?

Rah*_*wal 6

你可以使用这样的东西

    ISession session = GetSession();
    string hql = @"from Product p
                   where p.Category in (:categories)";

    var categoriesToSearch = new[] {new Category {Id = 1}, new Category {Id = 2}};

    var query = session.CreateQuery(hql);
    query.SetParameterList("categories", categoriesToSearch);

    var products = query.List<Product>();
Run Code Online (Sandbox Code Playgroud)

或者你可以试试这个

public void DeleteRows(int parentId, List<int> years)
{        
    const string query = "DELETE FROM TABLE t WHERE t.PARENT_ID=:Parent AND t.YEAR in (:yearList)";
    Session
            .CreateSQLQuery(query)
            .SetParameter("Parent", parentId)
            .SetParameterList("yearList", years)
            .ExecuteUpdate();
}
Run Code Online (Sandbox Code Playgroud)