2010-09-09 30 views
6

Tôi đã cố gắng để có được các giá trị khác biệt bằng cách sử dụng LINQ to NHibernate và tôi thất bại thảm hại.Làm thế nào tôi có thể nhận được các giá trị khác biệt bằng cách sử dụng LINQ to NHibernate?

Tôi đã thử:

var query = from requesters in _session.Linq<Requesters>() 
     orderby requesters.Requestor ascending 
     select requesters; 

return query.Distinct(); 

Cũng như

var query = from requesters in _session.Linq<Requesters>() 
     orderby requesters.Requestor ascending 
     select requesters; 

return query.Distinct(new RequestorComparer()); 

đâu RequestorComparer là

public class RequestorComparer : IEqualityComparer<Requesters> 
{ 

    #region IEqualityComparer<Requesters> Members 
    bool IEqualityComparer<Requesters>.Equals(Requesters x, Requesters y) 
    { 
     //return x.RequestorId.Value.Equals(y.RequestorId.Value); 
     return ((x.RequestorId == y.RequestorId) && (x.Requestor == y.Requestor)); 
    } 

    int IEqualityComparer<Requesters>.GetHashCode(Requesters obj) 
    { 
     return obj.RequestorId.Value.GetHashCode(); 
    } 
    #endregion 
} 

Không có vấn đề làm thế nào tôi cấu trúc cú pháp, nó không bao giờ dường như nhấn .Distinct(). Nếu không có .Distinct(), có nhiều bản sao theo mặc định trong bảng tôi đang truy vấn, theo thứ tự 195 tổng số bản ghi nhưng sẽ chỉ có 22 giá trị khác biệt được trả về.

Tôi không chắc mình đang làm gì sai nhưng sẽ đánh giá rất cao bất kỳ hỗ trợ nào có thể được cung cấp.

Cảm ơn

+0

sql là những truy vấn nào tạo ra? –

+0

Tại sao bạn không báo cáo đó là lỗi? – Paco

Trả lời

1

Tôi đã nhận thấy rằng các công trình sau (NHibernate v3.3.1).

  var query= (from requesters in _session.Query<Requesters>() 
         orderby requesters.Requestor ascending 
         select requesters.Requestor).Distinct(); 
+0

Lưu ý: Điều này sử dụng Nhà cung cấp LINQ tích hợp 'Truy vấn ' trong NHibernate 3.0. Câu hỏi ban đầu liên quan đến nhà cung cấp NHibernate.Linq không còn được hỗ trợ nữa. – Phill

1

Cố gắng sắp xếp lại để:

var query = from requesters in _session.Linq<Requesters>() 

    select requesters; 

return query.Distinct().OrderBy(x=>x.Requestor); 

Tôi đã thấy vấn đề với Trật tự của OrderBy và riêng biệt.

Hãy cho tôi biết nếu điều đó không hiệu quả với bạn.

+0

Đã thử rằng, vẫn không hoạt động đúng. Tôi nhận được kết quả chính xác như trước. –

+0

CHỌN this_.REQUESTORID là FK8_0_0_, this_.REQUESTOR là REQUESTOR0_0_ TỪ YÊU CẦU this_ WHERE this_.REQUESTORID =: p0 ORDER BY this_.REQUESTOR asc ;: p0 = 10775 <- Đây là SQL được tạo bởi truy vấn trên. –

0

Bạn đã thử với nhà cung cấp LINQ tích hợp mới trong NH 3.0 chưa?

Hình ảnh cũ rất hạn chế.

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