2012-08-31 17 views
0

我收到以下錯誤順序按NHibernate的原因「Antlr.Runtime.NoViableAltException」

型「Antlr.Runtime.NoViableAltException」引發的異常。 [.OrderBy [ORM.Entities.Core.Message,System.DateTime](。其中[ORM.Entities.Core.Message](NHibernate.Linq.NhQueryable`1 [ORM.Entities.Core.Message], Quote( (x,)=> (AndAlso(AndAlso(String.op_Equality(x.ConcerningItemType,p1), Equal(x.ConcerningItemId,p2)),OrElse(Equal(x.Sender.Id,p3), .Any [ORM.Entities.Core.MessageRecipient](x.Recipients,(r,)=> (Equal(r.Employee.Id,p4)),))))),),Quote((x,)=> (.FirstORM.Entities.Core.AuditGroup.Created)),)]

當我有一個IQueryable的結果集(剛剛施加一些邏輯到它),然後我嘗試通過一個子屬性來訂購它在c之前變量阿靈ToList()

var results = query.Where(x => x.ConcerningItemType == "1422" && x.ConcerningItemId == EnquiryId && //Messages for this Enquiry 
          (x.Sender.Id == EmployeeId || x.Recipients.Any(r => r.Employee.Id == EmployeeId))); 

然後我試着訂購這會導致一個錯誤

var results2 = results.OrderBy(x => x.AuditGroup.First().Created).ToList(); 

如果我下面的,而不是我沒有得到一個錯誤(移動tolist,迫使它打數據庫)

var results3 = results.ToList().OrderBy(x => x.AuditGroup.First().Created); 

詢問請求更多信息

AuditGroup類

public class AuditGroup : Entity 
{ 
    public virtual string Guid { get; set; } 
    public virtual string PageName { get; set; } 
    public virtual string ControlId { get; set; } 
    public virtual string ItemType { get; set; } 
    public virtual int ItemId { get; set; } 
    public virtual int EmployeeId { get; set; } 
    public virtual string IPAddress { get; set; } 
    public virtual string Parameters { get; set; } 
    public virtual DateTime Created { get; set; } 

} 

消息等級

public class Message : Entity 
{ 
    // This class represents the standard address fields, for reuse in other entities 
    // 
    public virtual int Id { get; set; } 
    public virtual int ConcerningItemId { get; set; } 
    public virtual String ConcerningItemType { get; set; } 
    public virtual String Subject { get; set; } 
    public virtual String Body { get; set; } 
    public virtual int RecipientCount { get; set; } 
    public virtual String RowStatus { get; set; } 

    public virtual Employee Sender { get; set; } 
    public virtual ICollection<MessageRecipient> Recipients { get; set; } 

    //eww have to do this to be able to access the created date of the message (stored in AuditGroup... Stupidly!) 
    public virtual ICollection<AuditGroup> AuditGroup { get; set; } 
} 

消息映射

​​

回答

0

請提供詳細信息(實體和地圖)

我敢肯定x.AuditGroup.First().Created惹的禍。我這樣說是因爲我試圖去思考生成的SQL查詢,而我不能。

我建議爲AuditGroup創建一個別名並以此命令。這非常粗略,我會怎麼做。

AuditGroup auditGroupAlias = null; 

query.JoinAlias(p => p.AuditGroup,() => auditGroupAlias) 
    .OrderBy(()=>auditGroupAlias.Created) 

再次與部分信息,我可以只給出部分解決方案。

+0

按照要求我已經提供了映射類和兩個實體類 – Steve

+0

你嘗試過使用'Alias'嗎? –

+0

爲什麼我需要在消息已知它的審覈組集合時創建別名? – Steve