2010-04-28 24 views

Trả lời

15

Tôi vừa tạo bí danh cho bộ sưu tập và thêm hạn chế.

var parentsWithKidName = session.CreateCriteria<Parent>() 
    .CreateAlias("Children", "c", JoinType.InnerJoin) 
    .Add(Restrictions.Eq("c.Name", childName)) 
    .SetResultTransformer(Transformers.DistinctRootEntity()) 
    .List<Parent>(); 

này sẽ cho kết quả trong

select p.* 
from parent p 
inner join child c on /* however it's mapped? */ 
where c.Name = ? 

Các biệt biến thực thể gốc sẽ xử lý tập hợp kết quả và loại bỏ cha mẹ trùng lặp. Họ vẫn đi qua dây mặc dù.

0

Những gì tôi đã làm là để tạo ra một truy vấn tiêu chuẩn cho các loại phụ huynh, sử dụng lợi nhuận để tạo ra một truy vấn tiêu chuẩn cho các loại hình đứa trẻ, và sau đó thêm các điều kiện cụ thể cho các truy vấn phụ loại con.

public virtual IList<T> GetByChildCriteria(string childName, 
    params ICriterion[] criterion) 
{ 
    ICriteria criteria = NHibernateSession 
    .CreateCriteria(persitentType) 
    .CreateCriteria(childName); 
    foreach (ICriterion criterium in criterion) 
    { 
     criteria.Add(criterium); 
    } 
    return criteria.List<T>(); 
} 

Lưu ý: Biến NHibernateSession thuộc loại ISession.

Các vấn đề liên quan