2016-04-04 5 views
3

Ich habe ein Objekt mit einer Eigenschaft, die eindeutige Werte hat. Dies ist möglicherweise kein guter Grund, aber diese Eigenschaft ist nicht meine ID, da es sich um eine Liste handelt und der Anzeigewert aus nicht druckbaren Zeichen besteht.Optimale Möglichkeit, nach einem Objekt zu suchen, indem Sie einen eindeutigen Wert einer seiner Eigenschaften verwenden

Ich möchte auf das Vorhandensein eines Objekts mit einem bestimmten Wert dieser Eigenschaft überprüfen. Die Optionen, an die ich bisher gedacht habe, sind die ID und die Verwendung der eingebauten% ExistsID-Methode, die Verwendung einer SQL-Abfrage und die manuelle Suche des globalen Index nach dem entsprechenden Index.

Das Problem mit der ersten Lösung ist ich bevorzuge eine lesbare ID. Wenn ich dumm bin, sag es bitte. Das Problem mit dem zweiten Ansatz ist, dass es mir scheint, dass SQL zwar für solche Sachen gut ist, aber in diesem speziellen Fall scheint es mir, dass ich diesen umständlichen Mechanismus mit viel Aufwand in Bewegung setze zu einem Ergebnis, das ich leichter bekommen könnte. Auch hier könnte ich nur dumm sein.

Das Problem mit dem letzten ist, dass der Wert, der eine LB ist, die hauptsächlich aus Zahlen besteht, als $ c (x, y, z) gespeichert wird. Ich bin mir nicht sicher, wie ich danach suchen soll (d. H. Wie ich von meiner Liste hierher komme). Außerdem scheint es irgendwie unordentlich zu sein und dass ich zu niedrig gehe.

Ich habe das Gefühl, dass es eine einfachere OO-Methode geben sollte, um Objekte basierend auf einem eindeutigen (indizierten) Wert zu holen, und ich bin mir fast sicher, dass es existiert, aber ich kann es nicht in den Dokumenten finden. Ein automatisch generiertes % PropertyExists (UniqueValue) wäre nett.

Vielleicht sollte ich meine eigene Generatormethode schreiben? Jeder Rat wird geschätzt.

Antwort

1

Sie können eine einfache SQL-Abfrage verwenden, um die COUNT() Funktion und kehrt dann zu verwenden, wenn die Zählung so von 1. zu tun ist, um diesen Thread einen Blick: Select count(*) from result query

+0

Vielen Dank für Ihre Antwort. Ich habe dies zuerst implementiert, aber ich bevorzuge die Lösung @DAiMor vorgeschlagen. – neManiac

4

Wenn Sie schauen Unter documentation finden Sie, dass jeder eindeutige Index in einer Klasse eine generierte Methode hat, wie Open und Exists and Delete. Und mit jeder dieser Methoden können Sie jedes Objekt nach bekannten eindeutigen Werten öffnen.
Also, wenn Sie Index wie dieser

Index SomeInd On (Prop1, Prop2) [ Unique]; 

haben, können Sie Objekt öffnen, so

set obj=##class(your.class).SomeIndOpen(prop1val, prop2val) 

oder überprüfen, ob solches Objekt bereits vorhanden ist, und erhalten und ID für dieses Objekt.

if ##class(your.class).SomeIndExists(prop1val, prop2val, .id) { 
    // 
} 

Ich hoffe, es wäre genug für Sie, wenn nicht, zögern Sie nicht, mehr zu fragen.

+0

Vielen Dank. Genau das habe ich gesucht. Eine nette Möglichkeit, dies mit einer automatisch generierten Methode zu tun. – neManiac

Verwandte Themen