2009-09-10 6 views
0

Почему этот запрос не работает, он всегда возвращает пустой список (сопоставление в порядке и я уверен, что база данных имеет данные!) Любые идеи?Почему этот запрос Nhibernate возвращает пустой список?

var ids = //IList<int> of ids 


var result = _session.CreateCriteria(typeof (User)) 
      .Add(Restrictions.InG("Id", ids)) 
      .CreateCriteria("Posts") 
      .AddOrder(Order.Asc("CreatedOn")) 
      .SetMaxResults(20) 
      .List<Post>(); 
+0

Вы запрашиваете тип пользователя, а затем завершаете запрос возвратом списка сообщений. В противном случае я не уверен? Я обычно не использую синтаксис CreateCriteria для этих типов методов доступа к данным – mikeschuld

+0

@mikeschuld: У меня есть .CreateCriteria («Сообщения»), поэтому я могу запросить список сообщений –

ответ

-2

Ну я просто использовал HQL вместо критериев API:

var result = _session.CreateQuery("from Post p order by p.CreatedOn where p.PostedBy.Id IN (" + sb + ")").List<Post>(); 

все работает просто отлично :)

+0

Прохладный. Рад, что один из трех вариантов может сработать для вас! :) – mikeschuld

4

Попробуйте использовать что-то вроде этого, вместо:

List<User> users = _session.CreateQuery("FROM User ORDER BY CreatedOn").List<User>().Where(u => ids.Contains(u.Id)); 

var posts = new List<Post>(); 
foreach(User user in users) { 
    posts.AddRange(user.Posts); 
} 

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

Вы также можете сжать его немного так:

List<Post> posts = _session.CreateQuery("FROM Post ORDER BY CreatedOn").List<Post>().Where(p => ids.Contains(p.User.Id)); 

ИЛИ третий вариант:

List<Post> posts = _session.CreateQuery("FROM Post ORDER BY CreatedOn WHERE User.Id IN (" + ids.ToArray().Join(",") + ")").List<Post>(); 
+0

Это нехороший пользователь может иметь тысячи сообщений я не хочу получать их из базы данных и сортировать их сортировать в памяти! –

+0

@ Yassir см. Третий вариант. Он должен только захватить правильный набор, а не тысячи ненужных. – mikeschuld

+0

Хорошо созданное свойство является почтовым свойством, а не свойством пользователя :) –

Смежные вопросы