2011-11-05 63 views
0

我得到一个MismatchedTreeNodeException与下面的简单查询使用NHibernate 3.2.0.4000抛出。我认为这是一个错误,如果有的话,是否有人知道工作?NHibernate Linq MismatchedTreeNodeException,SimpleBorder和GroupBy

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

您可以尝试移动排序依据的方法和ToList后调用它。我认为这是例外的直接原因。 (Linq提供者或多或少是一个C#=> SQL转换器,并且在GROUPBy之前的OrderBy在SELECT语句中无效)。 – pkmiec

+0

在GroupBy之后它也会失败,并且无法解析属性Key。在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>