2010-06-08 82 views
0

我正在使用Versant對象數據庫後端的C#項目,我試圖構建一個包含算術運算符的查詢。該文檔指出它受到支持,但缺乏任何示例。Versant OQL聲明與算術運算符

我試圖建立這樣的事情:

SELECT * FROM _orderItemObject WHERE _qtyOrdered - _qtySent > 0 

如果我嘗試在Object Inspector這個說法,我得到一個錯誤synthax附近的「 - 」。

任何人都有一個與這種聲明工作的VQL的例子?

感謝

回答

0

我不知道,在Object Inspector就知道了arithmtic表達式的語法。但是,在您的代碼中,您應該引用完全限定的類。那麼你使用的語法應該是非常好的。查詢查詢=新查詢(會話, 「select * from com.yourCompany.yourClass where _qtyOrdered - _qtySent> 0」);

QueryResult result = query.execute();

我剛剛在我的一個類上試過了,它工作正常。

乾杯, - 羅伯特

+0

大量的測試看來,你是正確的後,對象檢查似乎並不能夠支持這一點。但問題就是那麼深。似乎C#類型的十進制在Versant中被奇怪地支持,並被轉換爲char數組。這解釋了我的錯誤。 感謝您的回答。 – Pascal 2010-06-09 13:56:58

0

在C#和OQL你必須確保你選擇正確的類範圍。這是通過在類名稱中添加「Extent」後綴來完成的。例如,在我的Pet類中,我將在OQL字符串中標識所有具有「PetExtent」的寵物。

通過在下面的代碼中定義一個本地名字對象來在謂詞中訪問類成員。任何算術表達式都將由查詢引擎評估。

string query="SELECT * FROM PetExtent AS p WHERE p.Name = \"Ferris\" AND (p.age + 5) > 4"; 
IQueryResult result = scope.GetOqlQuery(query).Execute(); 

foreach (object o in result) 
    Out(o.ToString()); 

使用Versant的C#綁定測試OQL的最佳方法是使用集成到Visual Studio中的OQL查詢瀏覽器。查看Visual Studio中的Versant Menu下拉菜單。

最好的問候,

德里克

+0

感謝您指出OQL查詢瀏覽器。這將爲我節省很多麻煩。 – Pascal 2010-06-09 14:01:29

+0

System.Decimal和BigDecimal(JDO綁定)確實轉換爲字符串以存儲在服務器上。如果您需要在查詢中進行數學運算,則需要使用整數或浮點類型之一。 C#文檔中有一張表格,解釋了從CLR類型到Versant服務器類型的值類型映射。 – Derek 2010-06-09 17:18:52