2011-11-05 3 views
0

NHibernate 3.2.0.4000을 사용하여 아래의 간단한 쿼리로 MismatchedTreeNodeException이 발생합니다. 나는 그것이 버그라고 가정하고, 그렇다면 누군가는 주위의 일을 알고 있는가? 나는이 양식에 예를 들어 쿼리와 함께 놀았습니다NHibernate Linq MismatchedTreeNodeException, Simple OrderBy 및 GroupBy

var result = session.Query<File>() 
    .OrderBy(x => x.Author) 
    .GroupBy(file => file.Author) 
    .Select(author => new FileAuthor(author.Key, author.Count())) 
    .ToList(); 
+0

당신은있는 OrderBy 방법을 이동하고 ToList 후 전화를 시도 할 수 있습니다. 나는 그것이 예외의 직접적인 원인이라고 생각한다. (Linq 공급자는 C# => SQL 변환기이며, SELECT 문에서 GroupBy가 유효하지 않기 전에 OrderBy입니다.) – pkmiec

+0

GroupBy 후에도 속성 키를 확인할 수 없으므로 실패합니다. 또한 ToList를 추가 한 후에 데이터베이스에서 순서를 수행하는 것을 패배시키는 것은 메모리에서 수행 될 것이기 때문에 수행하지 않습니다. –

답변

0

잘 작동합니다 :

var result = session.Query<File>() 
        .GroupBy(file => file.Author) 
        .Select(author => new 
        { 
         Key = author.Key.AuthorId, 
         Count = author.Count() 
        }) 
        .ToList(); 

를 분명히, 당신은 개체에 의해 그룹, 그것은 단지의 ID 및 집계를 발사 할 수있을 때. 클라이언트에서 정렬을 수행해야합니다.

중고 매핑 :

<class name="Author" table="authors"> 
     <id name="AuthorId" column="author_id" /> 

    <property name="AuthorName" column="author_name" /> 

    <bag name="Files"> 
     <key> 
     <column name="author_id" /> 
     </key> 
     <one-to-many class="File"/> 
    </bag> 

    </class> 

    <class name="File" table="files"> 
     <id name="FileId" column="file_id" /> 

    <property name="FileName" column="file_name" /> 

    <many-to-one name="Author" class="Author"> 
     <column name="author_id" /> 
    </many-to-one> 

    </class>