2010-06-08 80 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