0

我刚刚开始使用 Neo4jClient 和 Cypher,令人惊讶的是,我在网上找不到任何使用密码查询 where 子句中的 DateTime 的示例。

当我试图在 DateTime 属性上过滤一些节点时,查询没有返回任何结果,这是我尝试的示例:

假设我正在寻找出生日期在时间范围内的所有人力资源部门的员工。我正在尝试构建的查询如下所示。

client.Cypher
    .Start(new { company = companyNode.Reference})
    .Match("(department)<-[:BELONGS_TO]-(employee)-[:BELONGS_TO]->(company)")
    .Where<Department>(department=>department.Name=='Human Resource')
    .AndWhere<Employee>(employee=> employee.DOB >= searchStart && employee.DOB<= searchEnd)
    .ReturnDistinct((employee)=> new {name = employee.Name});

这里 Employee->DOB/searchStart/searchEnd 都是 DateTimeOffset 字段,通过 neo4jclient 存储在图中的数据表示为“ 1990-09-28T19:02:21.7576376+05:30

当我调试代码时,我看到 Neo4jClient 实际上将查询表示为这样的东西

AND ((employee.DOB >=10/3/1988 8:16:41 PM +03:00) AND (employee.DOB <=10/3/2003 8:16:41 PM +03:00))

当我摆脱 DOB where 子句时,我确实得到了结果。

如果有人能指出如何在查询中使用 DateTimeOffset 属性,我将不胜感激。

问候, 基兰

4

2 回答 2

1

使用 DateTimeOffset 对我来说很好:

private static IList<Node<DateOffsetNode>> Between(IGraphClient client, DateTimeOffset from, DateTimeOffset to)
{
    ICypherFluentQuery<Node<DateOffsetNode>> query = new CypherFluentQuery(client)
        .Start(new { n = All.Nodes })
        .Where((DateOffsetNode n) => n.Date <= to && n.Date >= from)
        .Return<Node<DateOffsetNode>>("n");

    return query.Results.ToList();
}

刚刚在哪里DateOffsetNode

public class DateOffsetNode { public DateTimeOffset Date { get;set; } }

但另一种方法是存储该ticks值并与之进行比较:

.Where((DateObj o) => o.Ticks < DateTime.Now.Date.Ticks)

我通常定义DateObj如下:

public class DateObj {
    public long Ticks { get;set; }
    public int Year { get;set; }
    public int Month { get;set;}
    public int Day { get;set;}

    public DateObj(){}
    public DateObj(DateTime dt){
        Ticks = dt.Date.Ticks;
        Year = dt.Date.Year;
        Month = dt.Date.Month;
        Day = dt.Date.Day;
    }
}

所以我也可以做类似的事情:

.Where((DateObj o) => o.Year == 2013)

一段时间的等价物是也使用类似TotalMillisecondsDateTime 对象上的属性的东西:

.Where((TimeObj o) => o.TimeMs < DateTime.Now.TimeOfDay.TotalMilliseconds)
于 2013-09-25T06:52:26.960 回答
0

O'Reilly 关于 Neo4J 的书也有整本书(他们从 Neo4J 网站免费提供电子副本:http: //www.neo4j.org/learn)关于管理日期,我相信这与信息相呼应在上面链接的博客中。即他们建议将日期作为节点放入数据库(即与月节点有关系的年节点,与日节点有关系),然后将所有日期敏感节点链接到相关日期。

但是,如果您想以毫秒为单位进行测量,那会有点痛苦……

于 2014-02-21T07:45:13.453 回答