Простой пример моего класса:NHibernate QueryOver и коллекции Фильтрация
public class Post
{
public IEnumerable<Tag> Tags { get; set; }
}
пользователя проверяет несколько заинтересованных теги для фильтрации списка сообщений.
мне нужно фильтровать всю почту от выбранных тегов, как:
Session.QueryOver<Post>()
.WhereRestrictionOn(x => x.Tags)
.IsIn(criterion.InterestedTags.ToList())
.List<Post>();
Исключение: NHibernate.QueryException: Cannot use collections with InExpression
На самом деле, я должен показать сообщение, если один из его тега содержит в InterestedTags.
UPD
работает для меня:
Session.QueryOver<Post>()
.JoinAlias(p => p.Tags,() => tag)
.WhereRestrictionOn(() => tag.Id)
.IsIn(criterion.InterestedTags.Select(x => x.Id).ToArray())
.List<Post>();
Этот запрос бросает [NullReferenceException:. Ссылка на объект не указывает на экземпляр объекта] Но работает, если изменение: Session.QueryOver() .JoinAlias (р => p.Tags,() => tag) .WhereRestrictionOn (() => tag.Id) .IsIn (критерий.InterestedTags.Select (x => x.Id) .ToArray()) .List (); –
Вам нужно выбрать точное поле для сравнения. В этом случае идентификатор. Поэтому в методе IsIn нам нужен Id. IsIn (критерий .InterestedTags.Select (x => x.Id)). ToList() – maxspan