我正在使用Versant对象数据库后端的C#项目,我试图构建一个包含算术运算符的查询。该文档指出它受到支持,但缺乏任何示例。Versant OQL声明与算术运算符
我试图建立这样的事情:
SELECT * FROM _orderItemObject WHERE _qtyOrdered - _qtySent > 0
如果我尝试在Object Inspector这个说法,我得到一个错误synthax附近的“ - ”。
任何人都有一个与这种声明工作的VQL的例子?
感谢
我正在使用Versant对象数据库后端的C#项目,我试图构建一个包含算术运算符的查询。该文档指出它受到支持,但缺乏任何示例。Versant OQL声明与算术运算符
我试图建立这样的事情:
SELECT * FROM _orderItemObject WHERE _qtyOrdered - _qtySent > 0
如果我尝试在Object Inspector这个说法,我得到一个错误synthax附近的“ - ”。
任何人都有一个与这种声明工作的VQL的例子?
感谢
我不知道,在Object Inspector就知道了arithmtic表达式的语法。但是,在您的代码中,您应该引用完全限定的类。那么你使用的语法应该是非常好的。查询查询=新查询(会话, “select * from com.yourCompany.yourClass where _qtyOrdered - _qtySent> 0”);
QueryResult result = query.execute();
我刚刚在我的一个类上试过了,它工作正常。
干杯, - 罗伯特
在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下拉菜单。
最好的问候,
德里克
大量的测试看来,你是正确的后,对象检查似乎并不能够支持这一点。但问题就是那么深。似乎C#类型的十进制在Versant中被奇怪地支持,并被转换为char数组。这解释了我的错误。 感谢您的回答。 – Pascal 2010-06-09 13:56:58