C# 使用NHibernate的DateDiff发布

C# 使用NHibernate的DateDiff发布,c#,nhibernate,hql,C#,Nhibernate,Hql,我在代码中使用以下HQL string sPastDueForCustomer = @"select inv.fInvoiceDate as fInvoiceDate, cust.fName as fCustomerName, inv.fInvoiceNumberDisplay as fInvoiceNumberDisplay, inv.fBalance as fBalance, inv.fDueDate as fDueDate, date

我在代码中使用以下HQL

string sPastDueForCustomer = @"select 
    inv.fInvoiceDate as fInvoiceDate,
    cust.fName as fCustomerName,
    inv.fInvoiceNumberDisplay as fInvoiceNumberDisplay,
    inv.fBalance as fBalance,   
    inv.fDueDate as fDueDate,
    datediff(day, :GenerateDate, inv.fDueDate) as fDaysPastDue
    FROM tARInvoice as inv INNER JOIN inv.Customer as cust
    Where inv.fDueDate < :GenerateDate - " 
    + 
    ARApplicationSetup[0].fGracePeriod 
    + 
    @"  
    And inv.fInvoiceType= 'Manual'  
    And inv.fCustomerID = :CustomerID  
    And inv.fBalance > 0  
    And inv.fIsPosted = 1  
    And inv.fIsVoided = 0";                

    //get the result of query and return the object of PaymentInvoiceDetails
    IList<tARInvoice> PastDueForCustomer = 
        Session.CreateQuery(sPastDueForCustomer)
               .SetGuid("CustomerID", CustomerId)
               .SetDateTime("GenerateDate", GenerateDate)
               .SetResultTransformer(Transformers.AliasToBean<tARInvoice())
               .List<tARInvoice>();
当我运行此操作时,我得到以下错误:

No data type for node: 
MethodNode (datediff(exprList day ? (tarinvoice0_.fDueDate tarinvoice0_.fARInvoiceID fDueDate)))
[select
    inv.fInvoiceDate as fInvoiceDate,
    cust.fName as fCustomerName,
    inv.fInvoiceNumberDisplay as fInvoiceNumberDisplay,
    inv.fBalance as fBalance,   
    inv.fDueDate as fDueDate
    ,datediff(day, :GenerateDate,inv.fDueDate) as fDaysPastDue 
    FROM tARInvoice as inv INNER JOIN inv.Customer as cust
    Where inv.fDueDate < :GenerateDate - 15  
    And inv.fInvoiceType= 'Manual'  
    And inv.fCustomerID = :CustomerID  
    And inv.fBalance > 0  
    And inv.fIsPosted = 1  
    And inv.fIsVoided = 0]
在这里,fDaysPastDue的类型是int.

WHERE inv.fDueDate < :GenerateDate - " + ARApplicationSetup[0].fGracePeriod + @" ... 
由于操作涉及不同的类型而引发错误

确保使用GenerateDate变量中的正确类型,并在查询中正确设置它

Session.CreateQuery(sPastDueForCustomer)
       .SetGuid("CustomerID", CustomerId)
       .SetInt32("GenerateDate", GenerateDate.Days) 
       // instead of: ".SetDateTime(GenerateDate)"
       ...

请重新编排你的问题。。
Session.CreateQuery(sPastDueForCustomer)
       .SetGuid("CustomerID", CustomerId)
       .SetInt32("GenerateDate", GenerateDate.Days) 
       // instead of: ".SetDateTime(GenerateDate)"
       ...