在 Neo4jClient Cypher 查询中返回多列

2024-03-25

我正在使用 Azure,发现性能很慢。为了减少往返时间,我将以下查询合并为一个查询。

var queryItem = _graphClient
            .Cypher
            .Start(new
            {
                n = Node.ByIndexLookup("item_idx", "SKU", sSKU1),
            })
             .Return<Node<Item>>("n");

在代码的其他地方我有以下语句

var queryItem = _graphClient
            .Cypher
            .Start(new
            {
                m = Node.ByIndexLookup("item_idx", "SKU", sSKU2),
            })
             .Return<Node<Item>>("m");

我尝试将以上两个查询合并为一个查询,如下所示

var queryItem = _graphClient
            .Cypher
            .Start(new
            {
                n = Node.ByIndexLookup("item_idx", "SKU", sSKU1),
                m = Node.ByIndexLookup("item_idx", "SKU", sSKU2),
            })
             .Return<Node<Item>>("n");

我知道上面仅适用于单列,所以我尝试使用以下返回语句

.Return((n, m) => new
        {
            N = n.CollectAs<Node<Item>>(),
            M = m.CollectAs<Node<Item>>()
        });

但我对以下陈述有疑问

Node<Item> item1 = itemQueryResult.First();

它说错误无法将类型“AnonymousType#1”隐式转换为“Neo4jClient.Node”。

您能否建议一种简单的语法或返回多列以及提取第一个节点的方法? TIA。


我认为你在这里缺少的是Return语句返回一个对象每个密码行.

您的查询返回一个如下表:

|-----------------|
|    n   |   m    |
|-----------------| 
|  Node  |  Node  |
|------------------

这是一张表,一行两列。

在此语句中,您将返回匿名类型每个密码行:

.Return((n, m) => new
{
    N = n.CollectAs<Node<Item>>(),
    M = m.CollectAs<Node<Item>>()
});

该方法的返回类型是IEnumerable<AnonymousType>.

然后你试图获得第一个row(匿名类型)并将其隐式转换为Node<Item>,这是无效的。

您应该获取该行,然后获取其中的属性。

其他一些需要注意的事项:

  • 你不想使用CollectAs在这种情况下:这将使每个cell将表放入具有单个值的数组中,这只会增加更多间接性。
  • .As<Node<T>>()可以写成.Node<T>()

考虑到这一点,这是您想要的查询:

var result = _graphClient
    .Cypher
    .Start(new
    {
        n = Node.ByIndexLookup("item_idx", "SKU", sSKU1),
        m = Node.ByIndexLookup("item_idx", "SKU", sSKU2),
    })
    .Return((n, m) => new
    {
        N = n.Node<Item>(),
        M = m.Node<Item>()
    })
    .Results
    .Single();

var n = result.N;
var m = result.M;

合理?

PS:我希望你不是真的clubbing任何事物。小海豹不喜欢这样。你是结合查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Neo4jClient Cypher 查询中返回多列 的相关文章

随机推荐