2009-07-22 34 views
8

Tôi bắt đầu hiểu thấu NHibernate. Tôi đang cố gắng thực hiện một truy vấn chọn tất cả các bản ghi từ một bảng nhưng với danh sách bộ lọc loại trừ các ID, ví dụ: cho tôi tất cả Sản phẩm trừ những sản phẩm này với các giá trị ID này.NHibernate - Triển khai truy vấn "KHÔNG IN" bằng ICriteria

Thông thường trong T-SQL trực tiếp, tôi sẽ chuyển vào các ID được loại trừ thành một mệnh đề NOT IN như vậy.

SELECT * 
FROM Products 
WHERE ProductId NOT IN (1,5,9,23,45) 

Làm cách nào để thực hiện điều này trong NHibernate bằng ICriteria hoặc HQL (nhưng tốt nhất là ICriteria)?

Trả lời

23

Hãy thử

.Add(Expression.Not(Expression.In("ProductID", new int[] { 1, 5, 9, 23, 45 }))) 
+0

Awesome, mà làm việc một cách hoàn hảo, cảm ơn. Dưới đây là mã đầy đủ mà tôi đã kết thúc triển khai ... truy vấn.Thêm (Expression.Not (Expression.In ("ProductType.Id", excludedProductTypeIds.ToArray()))); Tôi đã thấy các phương pháp 'Không' và 'Trong', nhưng không nghĩ đến việc xích chúng như thế. –

+0

Yup, bạn có thể thực hiện tương tự với các lệnh OR và AND. –

+0

Một lưu ý phụ, không chắc các phương ngữ/động cơ SQL khác hoạt động cùng nhau như thế nào, nhưng SQL Server có giới hạn tham số truy vấn là 2100 mục, NHibernate điền vào các câu lệnh IN với các tham số và sẽ thất bại nếu loại trừProductTypeIds vượt quá 2100. –

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