Şu anda düzgün giden NH3.1 sürümüne geçme sürecindeyiz - Her şey mevcut kodla anlattığımız kadarıyla çalışıyor. 'dan biri, 2'den NH3'e geçme motivasyonları Linq desteğinden yararlanmak ve genellikle çok iyi çalışıyor.
p
bir Person
ve bir registration
r
bir vardır:NHibernate 3.1 İçindekiler ve Herhangi Biri
var results = from r in registrations
where (
from p in persons
where p.ExplicitManagers.Any(m => m.Manager == manager)
select p
).Contains(r.Registrant)
select r;
modelidir: Ancak maddeleri, özellikle bir alt koleksiyonu dayalı kontrol etmek istiyorum zaman nerede biraz daha karmaşık ile mücadele duyuyorum p
türünde ExplicitManager
ilişkisel varlıkları içeren bir kayıt numarası 'un başka bir Person
(yönetici) referansına sahiptir.
not: IQueryable<Registration>.Query()
ve numaralı kişilerde IQueryable<Person>.Query()
numaralı telefon numaraları kaydedilmiştir.
Esasen, kayıtları p
'un açık bir yöneticisi olan person1
adresinde kısıtlamaya çalışıyorum. Bunu birleştirme yoluyla yapabilirim, ancak Contains
alt sorgusu ile yapamam.
aşağıdaki hatayı alıyorum:
"System.InvalidOperationException : Sequence contains more than one matching element"
sonuçta ben (aslında olan yeniden kullanılabilir hale getirmek için yöneticiler kontrol etmek için mantığı yansıtmak için gerektiğinden bir alt sorgu olarak bunu nedeni Daha karmaşık ancak bu örnek için için sadeleştirdim, çünkü Contains
içindeki Any
keder yaratıyor). Herhangi bir alt sorgusu olmadığında iyi çalışıyor gibi görünüyor. Bu, yanlış yaptığım bir şey mi, yoksa desteklenmeyen bir şey mi yoksa bir hatadır ve aynı şeyi elde etmenin başka bir yolu var mı?
Verebileceğiniz her türlü yardım için çok teşekkürler.
Evet. Herhangi bir alt sorgunun içinde göründüğünde yalnızca bir sorun var gibi görünür/'İçerir' – IThasTheAnswer
Tesadüfen aşağıdaki işleri buldum: var sonuçlar = kayıtlarda r'den ( ) m => m.Manager == manager) seç p ) .Any (x => x == r.Registrant) r öğesini seçin; benim acil sorunumu çözen – IThasTheAnswer