Вопрос

Я пытаюсь выполнить то, что я могу описать только как обратную версию IN(), используя критерии Nhibernate..

Вместо того, чтобы говорить, что значение, хранящееся в свойстве, находится в списке / коллекции X

Я хочу сказать, что это значение X (идентификатор) находится в списке, который является свойством объекта.

Любая помощь приветствуется, я могу попытаться объяснить лучше, если в этом нет смысла.

Редактировать Приношу извинения людям, насколько я понимаю, в этом нет достаточного смысла...

У меня есть элемент события в моей системе, который может содержать список аудитории (элементов), к которым он применяется.Если администратор хочет удалить элемент аудитории, я хочу проверить, что на этот элемент не ссылаются никакие события.(AudienceList хранится в виде строкового списка идентификаторов аудиторий).

То, о чем я думал, было чем-то вроде:

var results = SessionInstance.Сеанс.Создайте критерий(typeof(EventItem.Товары.EventItem)) .Добавить(Ограничения.В("Список аудитории", myAudience.ID)) .Список();

Но мне нужен AudienceList и myAudience.ID должен быть наоборот, не так ли?У меня есть идентификатор аудитории, но мне нужно проверить, что он может быть в списке других идентификаторов.

Еще раз спасибо.

ПРАВКА 2

Определение EventItem таково, что одним из его свойств является подробная коллекция идентификаторов аудитории, они сохраняются в базе данных в виде строкового списка идентификаторов.

Это было полезно?

Решение

Редактировать:Отклонил мой предыдущий ответ.

Ну, похоже, здесь нет настоящей реляционной модели, так что все будет не так красиво.Без внешних ключей и тому подобного я не уверен, что NHibernate будет полезен в этой ситуации (по крайней мере, для генерации хорошего запроса).

Если все идентификаторы аудитории для одной записи события хранятся в одном поле , вам придется либо использовать SQL LIKE , либо сделать это в коде.Извлеките все элементы EventItems и выполните итерацию по ним, проверяя их коллекции AudienceList на наличие нужного идентификатора.Если вы пойдете по этому пути, возможно, было бы лучше создать DTO, чтобы свести к минимуму объем данных, которые вы перемещаете.Что -то вроде

session.CreateQuery("select new AudienceListDTO(e.AudienceList) from EventItems e").List();

Это предполагает, что вам просто нужно сообщить пользователю, что "этот тип аудитории все еще используется", а не указывать конкретные экземпляры.В противном случае вам придется добавить больше данных.

Другие советы

Вы имеете в виду что-то вроде этого?

class YourClass {
    List<int> theList;
}

IQueryable<YourClass> query = ...;
var result = from c in query where c.theList.Contains(value);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top