Tôi đang cố gắng thư viện PagedList.Mvc từ đâyLàm thế nào để trở lại IQueryable <T> để biết thêm truy vấn
https://github.com/TroyGoode/PagedList
trong đó có mẫu sử dụng này
var products = MyProductDataSource.FindAllProducts(); //returns IQueryable<Product> representing an unknown number of products. a thousand maybe?
var pageNumber = page ?? 1; // if no page was specified in the querystring, default to the first page (1)
var onePageOfProducts = products.ToPagedList(pageNumber, 25); // will only contain 25 products max because of the pageSize
implmentations điển hình của MyProductDataSource.FindAllProducts (); là dọc theo dòng của
public IQuerable<T> MyProductDataSource.FindAllProducts()
{
using (var ctx = new MyCtx())
{
return ctx.MyList().Where(....);
}
}
trong đó tất nhiên có InvalidOperationException() và DBContext đã được xử lý thông điệp
Looking for thực hành tốt nhất về cách trở IQueryable mà có thể được sử dụng ở đây không có vấn đề?
Đây KHÔNG phải là triển khai điển hình. Thông thường bạn tiêm một ngữ cảnh vào một lớp kho lưu trữ có nghĩa là bạn không bỏ đi ở cấp phương thức. –
@WiktorZychla Tôi không đồng ý. Cả hai đều là các triển khai hữu ích. Khi có thể phạm vi ngữ cảnh cục bộ cho phương thức thì đó là điều có thể chấp nhận được, nhưng khi việc tạo truy vấn vượt quá phạm vi của phương thức đó không phải là một tùy chọn, trong trường hợp này bạn cần phải điều chỉnh phạm vi của ngữ cảnh như vậy rằng, bất kể nó ở đâu, nó bao gồm cả thời gian tồn tại của truy vấn đó. Các lập trình viên có thể hiểu được tuổi thọ của bất kỳ truy vấn cụ thể nào và phạm vi ngữ cảnh sao cho nó ở cùng "mức độ" đó, không nhiều hơn, không kém. – Servy
@Servy: true nhưng trong hầu hết các trường hợp, ngữ cảnh của bạn là "per-http-context". Lưu ý rằng anh ta gắn thẻ câu hỏi với asp.net.Những gì bạn nói là một phần của một lý thuyết chung, ông cần một hướng dẫn chính xác cho kịch bản asp.net cụ thể của mình. –