Ich arbeite mit Couchbase v4.5 und der .NET SDK Version 2.3.8. Ich bin dabei, eine Sicht auf eine N1QL-Abfrage zu migrieren. Die Javascripts, die für die Ansicht verfügbar sind, haben mir die Flexibilität geboten, Array-Elemente des Dokuments zu sortieren und anschließend nur ein einzelnes Element aus dem Array auszuwählen. Während also in meiner Sicht hatte ich:Auswählen eines bestimmten Array-Elements
'Username': doc.Document.LogActions.sort(function(a,b){ return (a.Time > b.Time) })[doc.Document.LogActions.length - 1].Username
... Ich kämpfe jetzt das gleiche über den .NET-SDK in einer N1QL Abfrage zu erreichen. Der Vorbehalt ist, dass ich versuche, dies nur in LINQ zu tun. Ich weiß, dass ich die Raw-String-Abfragen verwenden kann, die volle N1QL-Unterstützung bieten, aber der Teamleiter möchte dies über LINQ tun ... es sei denn, es gibt absolut keine Möglichkeit, dies über LINQ zu tun.
Ich habe versucht, die folgenden:
Sortierung - Nicht von einem Grundstück auf ein Objekt in einem Array
Username = doc.Document.LogActions
.OrderByDescending(logAction => logAction.Time)
.FirstOrDefault()
.Username,
Nehmen Sie einfach Last zu sortieren erlaubt - nicht
unterstützt LetzteKeine Sortierung - Stil l gibt ein Array
Username = transaction.Document
.LogActions[transaction.Document.LogActions.Count - 1]
.Username
Das einzige, was ich denken kann, zu tun, ist nur das Array wieder zurück zu .NET und führen Sie die dort Filterung. Wir haben jedoch keine Basis für wie viele Elemente im Array im Durchschnitt sein werden. Wir würden lieber vermeiden, Daten zurück zu holen, die wir nicht brauchen.
Bin ich auf die Verwendung einer Raw-String-Abfrage verwiesen? Idealerweise versuche ich, ausgehend von der Eigenschaft Time
, die letzte "Protokollaktion" aus dem Array zu finden.