C# 使用NHibernate的DateDiff发布
我在代码中使用以下HQLC# 使用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
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)"
...