2014-05-23 138 views
1

我有一個用於返回存儲在我的Neo4j數據庫的Xbox遊戲本地化的文本以下Neo4jClient流暢API查詢:返回關係屬性

var localized = client.Cypher 
     .OptionalMatch("(xb:`XboxProfile`)-[p:PLAYS]->(g:`XboxGame`)-[:LOCALE]->(l:`XboxGameLocalized`)") 
     .Where((Xbox.Profile xb) => xb.GamerTag == xboxProfile.GamerTag) 
     .AndWhere((Xbox.Localization.Game l) => l.Locale == locale) 
     .Return((l, g, p) => new { 
      Localized = l.As<Xbox.Localization.Game>(), 
      Game = g.As<Xbox.Game>(), 
      LastPlayed = p.As<DateTimeOffset>() 
     }) 
     .Results.ToList(); 

PLAYS關係,我有一個LastPlayed屬性是我想要在查詢結果集中返回的DateTimeOffset。目前,p.As<DateTimeOffset>未按預期工作。它不解析日期和日期返回爲:
0001-01-01T00:00:00Z

什麼是迴歸關係屬性/屬性的正確方法是什麼?

回答

2

的問題是,p您的查詢是整個對象(或袋),但你沒有資格所需的屬性:

LastPlayed = p.As<DateTimeOffset>() 

,因爲它不能反序列化整個對象成DateTimeOffset,但它不是可以爲空的類型,您將獲得默認值。

你只需要描述的p類型,智能感知的緣故:

public class PlaysPayload 
{ 
    public DateTimeOffset LastPlayed { get; set; } 
} 

然後在查詢中使用此,爲解決你想要的屬性:

.Return((l, g, p) => new { 
     Localized = l.As<Xbox.Localization.Game>(), 
     Game = g.As<Xbox.Game>(), 
     LastPlayed = p.As<PlaysPayload>().LastPlayed // <-- this line is different 
    }) 

你做不是需要使用Relationship<T>RelationshipInstance<T>。免責聲明:我在早上6點30分打字,而在機場,他們打電話給我的飛機。我是Neo4jClient的作者,所以它應該是正確的,但我沒有驗證這個特定的解決方案。

+0

謝謝Tatham!我知道你是Neo4jClient的作者,我在Neo4jClient上看到過你的其他很棒的答案。祝賀它成爲3000代表! –