문제

컬렉션 인 속성 수로 객체 목록을 주문하는 방법이 있습니까?

인수를 위해 질문 이름 속성, 답변 개체 모음 인 속성 및 사용자 개체 모음 인 다른 속성이있는 질문 개체가 있다고 가정 해 봅시다. 사용자는 질문 테이블의 외국 키를 통해 질문 테이블에 가입하고 답변은 중간 결합 테이블과 결합됩니다.

nhibernate가 "질문"객체 목록을 받기를 원한다면 question.answers.count로 주문할 수 있습니까?

HQL을 사용하여 문서의 예제를 시도했습니다.

 List<Question> list = nhelper.NHibernateSession
        .CreateQuery("Select q from Question q left join q.Answers a group by q,a order by count(a)")
        .List<Question>();

그러나 나는 얻는다

"column Question.Name is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause" 

목록별로 그룹에 모든 속성을 추가하려고 시도했지만 작동하지 않습니다. 그렇다면 외국 키 사용자 ID는 위와 동일한 오류를 일으키지 만 nhibernate가 다음과 같이 나열하기 때문에 그룹에 포함시킬 수 없다는 것입니다.

Question.Users.UserId

포함 된 경우 해결하지 않습니다.

어떤 아이디어?

도움이 되었습니까?

해결책 2

LINQ를 사용할 수 없습니다.

내가 해결 한 방식 (그리고 당나귀라고 결정할 수 있음)은 UDF를 사용하여 카운트를 계산하는 데이터베이스에서 계산 된 열을 만드는 것입니다. 그런 다음 최대 절전 모드 매핑의 열을 update = "false"및 insert = "false"로 표시했습니다.

이제이 새 열로 쿼리를 정상적으로 주문할 수 있습니다. 그것은 내 앱 전체에 필요한 장소 에서이 값을 바인딩 할 수 있다는 추가 보너스를 제공합니다.

그것은 확인을 수행하는 것 같습니다. 너무 많은 성능이 들지 않기를 바랍니다.

다른 팁

나는이 문제를 해결했고 LINQ를 사용하여 주변을 돌아 다녔다.

            var sort = from n in c
                       orderby q.Answers.Count
                       select n;

나는 그것이 구문이라고 생각합니다. 누군가가 좋을 것이라고 확인할 수 있다면 Linq를 너무 많이 사용하지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top