Как настроить критерии в nHibernate для запроса нескольких значений - PullRequest
1 голос
/ 06 мая 2010

Я хочу запросить набор результатов на основе содержимого списка, мне удалось сделать это для одного экземпляра класса Foo, но я не уверен, как бы это сделать для IList<Foo>.

Так что для одного экземпляра класса Foo это работает:

        public ICriteria CreateCriteria(Foo foo)
        {
            return session
                .CreateCriteria<Component>()
                .CreateCriteria("Versions")
                .CreateCriteria("PublishedEvents")
                .Add(Restrictions.And(Restrictions.InsensitiveLike("Name", foo.Name, MatchMode.Anywhere),
                                      Restrictions.InsensitiveLike("Type", foo.Type, MatchMode.Anywhere)))
                .SetCacheable(true);
        }

Но как мне это сделать, если параметром метода является список Foo?

 public ICriteria CreateCriteria(IList<Foo> foos)
    {
        return session
            .CreateCriteria<Component>()
            .CreateCriteria("Versions")
            .CreateCriteria("PublishedEvents")
            .Add(Restrictions.And(Restrictions.InsensitiveLike("Name", foo.Name, MatchMode.Anywhere),
                                  Restrictions.InsensitiveLike("Type", foo.Type, MatchMode.Anywhere)))
            .SetCacheable(true);
    }

1 Ответ

1 голос
/ 06 мая 2010

Если вы думаете о том, что вы пытаетесь сделать с этим запросом, на самом деле нет смысла запрашивать его в используемой вами конструкции. Единственный вариант, который у вас есть, - это циклически проходить и динамически создавать критерии следующим образом:

 public ICriteria CreateCriteria(IList<Foo> foos)
    {
        var criteria = session
            .CreateCriteria<Component>()
            .CreateCriteria("Versions")
            .CreateCriteria("PublishedEvents")
            .SetCacheable(true);

        foreach(var foo in foos)
        {
            criteria.Add(Restrictions.And(Restrictions.InsensitiveLike("Name", foo.Name, MatchMode.Anywhere),Restrictions.InsensitiveLike("Type", foo.Type, MatchMode.Anywhere)));
        }
        return criteria;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...