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));
}
問題はyearsAsCommaSeperatedString
文字列であるため、データベースはそれを数字として解釈できないことです。また、整数のリストをパラメータとして追加しようとしましたが、NHibernate はそれをどうするかわかりません。
where in(collection)
CreateSQLQuery でどのように使用できますか?