2016-04-04 20 views
3

Benzersiz özelliklere sahip bir özelliğe sahip bir nesnem var. İyi bir neden olmayabilir, ancak bu özellik benim kimliğim değil, çünkü bir liste ve görüntü değeri yazdırmayan karakterlerden oluşuyor.Nesnelerin özelliklerinden birinin benzersiz bir değerini kullanarak bir nesneyi aramak için en uygun yol

Bu özelliğin belirli bir değerine sahip bir nesnenin varlığını kontrol etmek istiyorum. Şimdiye kadar düşündüğüm seçenekler kimliğini oluşturuyor ve ardından bir SQL sorgusu kullanarak ve uygun alt dizgiyi global olarak arayarak yerleşik%% ExistsID yöntemini kullanıyor.

İlk çözümle ilgili problem, insan tarafından okunabilir bir kimliğe sahip olmayı tercih ediyorum. Eğer aptal olursam, lütfen söyle.

2. yaklaşımın problemi, SQL'in bu gibi şeyler için iyi olmasına rağmen, bu özel durumda bana öyle geliyor ki, bu hantal mekanizmayı harekete geçirmenin çok fazla olduğunu düşünüyorum. Daha kolay elde edebilmem gereken bir sonuç. Yine, bu konuda aptalca olabilirim.

Sonuncusu ile ilgili sorun, çoğunlukla sayılardan oluşan bir LB değeri olan değerin $ c (x, y, z) olarak saklanmasıdır. Bunu nasıl arayacağımı bilmiyorum (yani listemden bu konuya nasıl geçeceğim). Ayrıca, biraz dağınık görünüyor ve çok düşük seviyeye iniyorum.

Nesneleri benzersiz (endeksli) bir değere dayanarak almak için daha basit bir OO yolu olması gerektiğini düşünüyorum ve neredeyse var olduğundan eminim ama dokümanlar içinde bulamıyorum. Otomatik olarak oluşturulmuş bir % PropertyExists (UniqueValue) güzel olurdu.

Belki kendi jeneratör yöntemimi yazmalıyım? Herhangi bir tavsiye memnuniyetle karşılanır.

cevap

1

Sen bu parçacığı bakmak COUNT() fonksiyonunu kullanarak daha basit bir SQL sorgusu kullanın ve sonra sayım Bunu yapmak için 1. ait olup olmadığını dönebilirsiniz: Select count(*) from result query

+0

Cevabınız için teşekkür ederiz. Bunu ilk başta gerçekleştirdim, ama önerdiğim çözüm önerisini tercih ediyorum. – neManiac

4

Bakarsanız documentation adresinde, bir sınıftaki her benzersiz dizinin Aç ve Varolan ve Sil gibi bazı oluşturulan yöntemlere sahip olduğunu göreceksiniz. Ve bu yöntemlerden herhangi biri ile herhangi bir nesneyi bilinen benzersiz değerlere açabilirsiniz.
Yani, bu

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

gibi indeksi varsa, bu nedenle

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

nesneyi açabilir veya böyle bir nesne zaten var olmadığını kontrol edin ve bu nesne için olsun ve kimliği.

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

Umarız sizin için yeterli olur, eğer olmasa da, daha fazla sormaya çekinmeyin.

+0

Çok teşekkür ederim. Tam olarak aradığım şey bu. Otomatik olarak oluşturulmuş bir yöntemle yapmanın güzel bir OO yolu. – neManiac

İlgili konular