2
您好我是NHibernate中的新成員,我有點困惑。Nhibernate ICriteria和在查詢中使用Lambda表達式
假設我們有一個產品表。 讓產品表有2列price1和price2。
通過HQL那時,我可以查詢mapped產品實體如下:
string queryString = @"from product p
where p.price1 = p.price2 + 100 ";
IList result = session.CreateQuery(queryString).List();
我怎樣才能做到這一點通過的ICriteria API。
我知道這是荒謬的,但我想喜歡某事:
session.CreateCriteria(typeof(product))
.Add(Expression.Eq("price1", "price2" + 100))
.List()
或者更恰當地折騰像(使用lambda擴展):
session.CreateCriteria(typeof(product))
.Add<product>(p => p.price1 == (p.price2 + 100))
.List()
其實我下載拉姆達擴展項目從googlecode和我擴展它以recused處理二進制和一元表達式來實現表達式,如:
session.CreateCriteria(typeof(product))
.Add<product>(p =>
(!(p.price1 > 29007) && (p.price1 > 19009))
|| (p.price2 == 29009));
我目前正在處理像上面這樣的查詢,但算術子句令我煩惱,因爲我無法返回適當的限制來獲得我需要的標準。
mpffh我厭倦了試圖全面解釋它。我希望它工作。任何幫助表示讚賞。
TY非常多,那方言翻譯工作完美。實際上,它也給我提供了另一條處理MethodCallExpressions的線索,例如=> session.CreateCriteria(typeof(product)) .Add(p => p.price1.ToString()==(p.price2 + 100).ToString()) .List() 例如,擴展您的方式,我知道能夠在表達式中使用ToString()在NUMBER和VARCHAR2類型的2列之間創建eqProperty標準。 2連續... –
mutoss
2009-11-20 10:20:35