在查询 neo4j 客户端时排除 属性

Exclude property on query neo4j client

我正在制作一个类似于小型网络的应用程序。 我有这个 class :

class Person
{
    public string Email {get; set;}
    public string Password {get; set;}
    public int Age {get; set;}
    public long Birthday {get;set;}
    ... 30 properties more
}

我有这个问题:

_graphClient.Cypher.Match ("n:Person")
    .Where<Person>(n => n.Email == info.Email)
    .Return(n => n.As<Person>)

但我希望我的查询忽略密码和 return 所有其他属性。

确切地说,我希望它是:

{
 Email: "email_1",
 Age : 10,
 Birthday : 1000
 ... 30 properties more
}

有人能帮帮我吗?

谢谢。

我可以想到三种选择,但我认为只有一种适合您。您可以将属性 [JsonIgnore] 附加到您的 Password 属性 - 但这将阻止它永远被序列化 - 我认为你不想要那样。

第二种选择是为您的 return 使用匿名类型,例如:

.Return(n => new {
        Email = n.As<Person>().Email,
        /* etc */
    })

但我认为这将意味着您将编写大量代码,我想您宁愿避免这样做。

最后的选择是:

public class Person {
    public string Email { get; set; }
    /* All other properties, except Password */
}

public class PersonWithPassword : Person {
    public string Password { get;set; }
}

然后在你所在的地方使用Person,在你需要密码的地方使用PersonWithPassword

如果您将会员资格设置为按原样使用 Person,您可能会发现自己遇到了问题 - 在这种情况下,您可以执行以下操作:

public class PersonWithoutPassword {
    public string Email { get; set; }
    /* All other properties, except Password */
}

public class Person : PersonWithoutPassword {
    public string Password { get;set; }
}

在你的 return 中 - 你会 return:

Return(n => n.As<PersonWithoutPassword>())

相反。