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>();
You have to use alias to make restrictions on
one-to-many
partTry following code snippet:
*Assuming that
InterestedTags
is collection of identifiers.