NHibernate QueryOver and Collection Filtering
nhibernate, nhibernate-3, queryover
Solution
You have to use alias to make restrictions on `one-to-many` part
Try following code snippet:
Tag tag = null;
Session.QueryOver<Post>()
.JoinAlias(p => p.Tags, () => tag)
.WhereRestrictionOn(() => tag.Id)
.IsIn(criterion.InterestedTags.ToList()) //*
.List<Post>();
*Assuming that `InterestedTags` is collection of identifiers.
Problem
Simple example of my class: ``` public class Post { public IEnumerable<Tag> Tags { get; set; } } ``` User checks few interested tags for filtering Post list. I need to filter all post by selected tags like: ``` Session.QueryOver<Post>() .WhereRestrictionOn(x => x.Tags) .IsIn(criterion.InterestedTags.ToList()) .List<Post>(); ``` Exception: `NHibernate.QueryException: Cannot use collections with InExpression` Actually, I should show post if one of its tag contains in InterestedTags. UPD Works for me: ``` Session.QueryOver<Post>() .JoinAlias(p => p.Tags, () => tag) .WhereRestrictionOn(() => tag.Id) .IsIn(criterion.InterestedTags.Select(x => x.Id).ToArray()) .List<Post>(); ```