2

私のクラスの簡単な例:

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

実際、そのタグの1つがInterestedTagsに含まれている場合は、投稿を表示する必要があります。

UPD

私のために働く:

Session.QueryOver<Post>()
    .JoinAlias(p => p.Tags, () => tag)
    .WhereRestrictionOn(() => tag.Id)
    .IsIn(criterion.InterestedTags.Select(x => x.Id).ToArray())
    .List<Post>();
4

1 に答える 1

6

one-to-many一部を制限するにはエイリアスを使用する必要があります

次のコードスニペットを試してください。

Tag tag = null; 
Session.QueryOver<Post>()
    .JoinAlias(p => p.Tags, () => tag)
    .WhereRestrictionOn(() => tag.Id)
    .IsIn(criterion.InterestedTags.ToList()) //*
    .List<Post>();

InterestedTags*それが識別子のコレクションであると仮定します。

于 2012-05-30T06:32:25.360 に答える