Удаление нескольких записей по списку id с помощью инструкции HQL

Я хочу удалить несколько записей определенного объекта, где идентификатор объекта находится в списке идентификаторов, которые у меня есть. Я пытаюсь выполнить это действие в С# с NHibernate.

У меня есть список идентификаторов.

Я хочу сделать что-то похожее на это:

var idList = new List<guid>() { Guid.NewGuid(),Guid.NewGuid()};
_session.CreateQuery("DELETE FROM MapsItem o WHERE o.Id = IN :idList")
 .SetParameterList("idList", idList)
 .ExecuteUpdate();
</guid>

Это приводит к следующей ошибке:

Exception of type 'Antlr.Runtime.NoViableAltException' was thrown. near line 1, column 33 [DELETE FROM Album o WHERE o.Id = IN :idList]

Запрос представляет собой инструкцию HQL.

Что не так в запросе HQL.

Оба предоставленных ответа на вышеупомянутый вопрос дают правильное решение. Однако, когда я выполняю HQL, ошибка выглядит так:

could not insert/select ids for bulk delete[SQL: insert into #MapsItem SELECT mapsitem0_.Id as Id FROM MapsItem mapsitem0_ inner join BaseEntity mapsitem0_1_ on mapsitem0_.Id=mapsitem0_1_.Id WHERE Id in (? , ? , ? , ? , ? , ?)]

Сущность MapsItem происходит от сущности BaseEntity. Оба имеют идентификатор свойства в базе данных. SQL-запрос не может быть выполнен, потому что идентификатор столбца в предложении WHERE является неоднозначным.

Как я могу решить эту проблему?

2 ответа

Удалите знак равенства:

DELETE FROM myObject o WHERE o.Id IN :idList


Удалить знак равенства, а также неверный запрос. Это должно быть что-то вроде этого. и я предлагаю вам использовать string.Format вместо этого.

var idList = new List<guid>() { Guid.NewGuid(),Guid.NewGuid()};
_session.CreateQuery(string.Format("DELETE FROM myObject o WHERE o.Id IN 
({0})",string.Join(",",idList.ToArray()))).ExecuteUpdate();
</guid>

licensed under cc by-sa 3.0 with attribution.