0

我在代码中使用以下 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]

的类型fDaysPastDueint

4

1 回答 1

0

在这里,

WHERE inv.fDueDate < :GenerateDate - " + ARApplicationSetup[0].fGracePeriod + @" ... 

您正在int从 a 中减去 a DateTime,这变成了这个,

WHERE inv.fDueDate < :GenerateDate - 15

引发错误,因为该操作涉及不同的类型。

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

Session.CreateQuery(sPastDueForCustomer)
       .SetGuid("CustomerID", CustomerId)
       .SetInt32("GenerateDate", GenerateDate.Days) 
       // instead of: ".SetDateTime(GenerateDate)"
       ...
于 2013-01-18T15:10:06.937 回答