나는이 쿼리가 있습니다. Track
은 List
Indices
(hasmany)입니다.NHibernate에 Linq에으로 fetchmany 많은 카운트 == 0
20 개의 행을 가져 오는 대신 2 행을 얻습니다.
프로파일 러에서 결과를 보았을 때 Take
은 Track
이고, Album
이 아닙니다.
아이디어가 있으십니까? 감사
나는이 쿼리가 있습니다. Track
은 List
Indices
(hasmany)입니다.NHibernate에 Linq에으로 fetchmany 많은 카운트 == 0
20 개의 행을 가져 오는 대신 2 행을 얻습니다.
프로파일 러에서 결과를 보았을 때 Take
은 Track
이고, Album
이 아닙니다.
아이디어가 있으십니까? 감사
LINQ
var filtered =
from a in session.Query<Album>()
from t in a.Tracks
where !t.Indices.Any()
select a.Id
var results = session.Query<Album>()
.Where(a => filtered.Contains(a.Id))
.Take(20)
.List()
QueryOver
var results = session.QueryOver<Album>()
.WhereRestrictionOn(a => a.Id).IsIn(QueryOver.Of<Album>()
.JoinQueryOver(a => a.Tracks)
.Where(t => !t.Indices.Any())
.Select(a => a.Id))
.Take(20)
.List()
내가 큰 Linq에 NHibernate에 대한 전문 아니에요하지만 난 당신을뿐만 아니라 도울 수있는 그 자 NHibernate를 조회 할 수있는 또 다른 방법이 알고 . QueryOver
이라고합니다. Linq와 같은 멤버 식을 사용하는 강력한 형식의 쿼리 구문입니다. 바로 지금 QueryOver
은 NHibernate 커뮤니티에서 훨씬 더 강력합니다. 왜냐하면 주로 조건 쿼리 (이는 꽤 오랫동안있었습니다)에 기반하기 때문입니다.
서로 다른 쿼리 언어에 대한 자세한 학습에 관심이 있다면 당신은이 사이트를 체크 아웃해야합니다 : NHibernate: Queries
나는 또한 내가 다른 플러그인과 당신이 NHibernate에 사용할 수있는 기술에 대한 기사를 블로그가 (방법을 포함하여 쿼리하려면) - My Blog
이하는 쿼리를 통해 찾고자하는 대상을 자세히 보여 주어야합니다.
Album a = null;
Tracks t = null;
Indices i = null;
var query = session.GetQueryOver(() => a)
.JoinAlias(() => a.Tracks,() => t)
.JoinAlias(() => t.Indicies,() => i)
.Where(() => i.Indices.Count() == 0)
.Take(20)
.ToList()
;
추가 당신은 또한 메서드 호출에 유형 JoinType
의 다른 매개 변수를 추가하여 조인 유형에서 지정할 수있는 쿼리에 조인. 예 :
.JoinAlias(() => a.Tracks,() => t, JoinType.LeftOuterJoin)
이 쿼리 오버 쿼리는 OP 설명과 동일한 문제가 있습니다. 테이크는 조인에 적용되며 앨범 20 개가 아니라 조인 행 20 개를 반환합니다. – Firo