【问题标题】:Versant OQL Statement with an Arithmetic operator带有算术运算符的 Versant OQL 语句
【发布时间】:2010-06-08 20:17:20
【问题描述】:

我正在开发一个使用 Versant 对象数据库后端的 c# 项目,并且我正在尝试构建一个包含算术运算符的查询。文档声明它受支持,但没有任何示例。

我正在尝试构建这样的东西:

SELECT * FROM _orderItemObject WHERE _qtyOrdered - _qtySent > 0

如果我在 Object Inspector 中尝试此语句,我会在“-”附近收到一个语法错误。

任何人都有使用这种语句的工作 VQL 的示例?

谢谢

【问题讨论】:

    标签: object-oriented-database versant-vod


    【解决方案1】:

    我不确定对象检查器是否知道算术表达式的语法。但是,在您的代码中,您应该指的是完全限定的类。那么您使用的语法应该非常好。

    查询查询=新查询(会话, "select * from com.yourCompany.yourClass where _qtyOrdered - _qtySent > 0");

    QueryResult 结果 = query.execute();

    我刚刚在我的一门课上尝试过,效果很好。

    干杯, -罗伯特

    【讨论】:

    • 经过大量测试看来您是对的,Object Inspector 似乎无法支持这一点。但问题比那更深。似乎 Versant 奇怪地支持 C# 类型的小数,并转换为 char 数组。这解释了我的错误。感谢您的回答。
    【解决方案2】:

    使用 C# 和 OQL,您必须确保选择正确的类范围。这是通过在类名中添加“Extent”后缀来完成的。例如,在我的 Pet 类中,我会在 OQL 字符串中用“PetExtent”标识所有宠物。

    通过在下面的代码中定义一个本地名字对象 p 在谓词中访问类成员。任何算术表达式都将由查询引擎评估。

    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 下拉菜单。

    最好的问候,

    德里克

    【讨论】:

    • 感谢您指出 OQL 查询浏览器。以后会省去很多麻烦。
    • System.Decimal 和 BigDecimal(JDO 绑定)确实被转换为字符串以存储在服务器上。如果您需要在查询中进行数学运算,则需要坚持使用整数或浮点类型之一。 C# 文档中有一张表,解释了从 CLR 类型到 Versant 服务器类型的值类型映射。
    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多