2009-09-10 6 views
0

왜이 쿼리가 작동하지 않을지라도 항상 빈 목록을 반환합니다 (매핑은 정상이며 데이터베이스에 데이터가있는 것은 확실합니다). 어떤 아이디어입니까? 이 Nhibernate 쿼리가 빈 목록을 반환하는 이유는 무엇입니까?

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); 
} 

내가 그 당신의 사용자가 이미 게시물 모음을 가지고에 달려 생각하지만, 대부분의 절전 모드 구현은 거기에 그런 일이 있어야합니다

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

난 그냥 대신 조건 API의 HQL을 사용 음 :

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

모든 것이 제대로 작동합니다.

+0

멋지다. 다행히도 세 가지 옵션 중 하나가 해결 될 수 있습니다! :) – mikeschuld

4

하는 대신이 같은 것을 사용해보십시오.

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

또는 제 3 옵션 :

당신은 또한이 같은 비트를 압축 할 수

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

이것은 수천 개의 게시물이있을 수 있습니다. 나는 데이터베이스에서 그들을 얻고 그들을 정렬 메모리에 정렬하고 싶지 않아! –

+0

@Yassir은 세 번째 옵션을 참조하십시오. 수천 개의 불필요한 세트가 아니라 올바른 세트를 잡아야합니다. – mikeschuld

+0

글쎄 createdon 속성은 사용자 속성이 아닌 게시 ​​속성입니다. :) –

관련 문제