我在代码中使用以下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
。
答案 0 :(得分:0)
在这里,
WHERE inv.fDueDate < :GenerateDate - " + ARApplicationSetup[0].fGracePeriod + @" ...
您正在从int
中减去DateTime
,这将变为此,
WHERE inv.fDueDate < :GenerateDate - 15
引发错误,因为操作涉及不同的类型。
确保使用GenerateDate
变量中的正确类型,并在查询中正确设置,
Session.CreateQuery(sPastDueForCustomer)
.SetGuid("CustomerID", CustomerId)
.SetInt32("GenerateDate", GenerateDate.Days)
// instead of: ".SetDateTime(GenerateDate)"
...