2009-07-28 32 views
6

Tôi đang tải các bộ sưu tập và cũng vì có quá nhiều trường trong bảng người, tôi đang viết một hàm chiếu để chỉ truy xuất các thuộc tính nhất định. Nó hoạt động với các thuộc tính, không chỉ là các bộ sưu tập của các thực thể khác. Tôi sẽ ổn nếu họ được nạp vào như là proxy và tôi có thể nhận được chúng sau này, nhưng ngay bây giờ nó chỉ tải trong null.Làm thế nào để sử dụng NHibernate Projections để lấy một bộ sưu tập

public IList<Person> ListTop40() 
     { 
      var list = _session.CreateCriteria(typeof(Person)) 
        .SetProjection(Projections.ProjectionList() 
        .Add(Projections.Property("FirstName")) 
        .Add(Projections.Property("LastName")) 
        .Add(Projections.Property("Jersey")) 
        .Add(Projections.Property("FortyYard")) 
        .Add(Projections.Property("BenchReps")) 
        .Add(Projections.Property("VertJump")) 
        .Add(Projections.Property("ProShuttle")) 
        .Add(Projections.Property("LongJump")) 
        .Add(Projections.Property("PersonSchoolCollection")) 
        ) 
        .List<IList>() 
        .Select(l => new Person() { FirstName = (string)l[0], LastName = (string)l[1], Jersey = (Decimal)l[2], FortyYard = (Decimal)l[3], BenchReps = (Decimal)l[4], VertJump = (Decimal)l[5], ProShuttle = (Decimal)l[6], LongJump = (Decimal)l[7], PersonSchoolCollection = (IList<Person_School>)l[8]}); 

      IList<Person> s = list.ToList(); 
      return s; 
     } 

Trả lời

1

Bạn có bao nhiêu thuộc tính? Tôi có khoảng 30 có thể nhiều hơn trên một thực thể khách hàng và không có vấn đề khi tải nó trong NH.

Bạn có thể lo lắng về hiệu suất khi không thực sự xảy ra. (Cũ: sớm tối ưu hóa là gốc rễ của mọi tội lỗi" :))

Có những gì đã nói - tôi nghi ngờ một cái gì đó như thế này được hỗ trợ

+0

Tôi có khoảng 80 tài sản, vì vậy nó thực sự là cần thiết trong tình huống này.Tôi khá chắc chắn tôi không thể lấy nó với mã này, nhưng tôi nghĩ rằng có một số cách với dự để có thể lấy chỉ 1 trong số nhiều bộ sưu tập – luke

+0

trường hợp đó, bạn có thể có nhiều may mắn hơn trong nhóm nhusers trên google groups – sirrocco

+0

Tôi có nó được đăng ở đó. Nếu tôi nhận được câu trả lời, hãy đăng nó lên đây. Cảm ơn. – luke

2

hãy thử sử dụng AliasToBeanResultTransformer:.

var list = _session.CreateCriteria(typeof(Person)) 
       .SetProjection(Projections.ProjectionList() 
       .Add(Projections.Property("FirstName")) 
       .Add(Projections.Property("LastName")) 
       .Add(Projections.Property("Jersey")) 
       .Add(Projections.Property("FortyYard")) 
       .Add(Projections.Property("BenchReps")) 
       .Add(Projections.Property("VertJump")) 
       .Add(Projections.Property("ProShuttle")) 
       .Add(Projections.Property("LongJump")) 
       .Add(Projections.Property("PersonSchoolCollection")) 
       ) 
       .SetResultTransformer(new NHibernate.Transform.AliasToBeanResultTransformer(typeof(Person))) 
       .List<Person>(); 
Các vấn đề liên quan