Nếu tôi sử dụng Chọn trên IQueryable trên kết quả khung thực thể của tôi, tôi sẽ nhận được 4 mục.IQueryable <T> cho kết quả khác với Danh sách <T>
Nếu tôi sử dụng Chọn trên một IQueryable.ToList() Tôi nhận được tất cả 36 mục.
Đây là mã của hàm:
public ImagesGetModelView Get(int start, int count)
{
if (count <= 0) count = 9;
else if (count > ImageHandler.MaxResult) count = ImageHandler.MaxResult;
IQueryable<Image> imagesList = ImagesHandler.FetchRangeScore(start, count)
.Where(m => m.Domain == Database.Enums.ImageDomain.Gfycat);
//Works using list :(
//var list = imagesList.ToList();
//Select all subreddits once
//Returns 4 instead of 36 if not using the list ...
//Returns 1 instead of 2 with Distinct() if not using the list
IEnumerable<Subreddit> subreddits = imagesList
.Select(m => m.Subreddit); //.Distinct();
ImagesGetModelView result = new ImagesGetModelView()
{
Items = imagesList,
Subreddits = subreddits
};
return result;
}
public IQueryable<Image> FetchRangeScore(int a_start, int a_count)
{
return Repository.AllQueryable().OrderByDescending(m => m.Score)
.Skip(a_start).Take(a_count);
}
Trong số 36 mặt hàng 2 Subreddits sẽ khác nhau. Nhưng kể từ khi chỉ có 4 trong số 36 được lấy từ Select() nó chỉ tìm thấy 1 khác biệt. Vì vậy, có bất cứ điều gì tôi có thể làm với các biểu thức LINQ để có được dữ liệu chính xác để tuyên bố riêng biệt hoạt động hoặc tôi phải biến nó thành một Danh sách trước khi tiếp tục với các chức năng Chọn & Riêng biệt?
Chỉnh sửa:
bằng cách di chuyển vị trí satement từ đầu đến cuối toàn bộ truy vấn. Nó có vẻ hoạt động chính xác ngay bây giờ. Chọn trả về tất cả 36 mục e.t.c ... mà lần lượt làm cho công việc khác biệt vì nó có thể tìm thấy nhiều hơn 1 giá trị duy nhất.
public IQueryable<Image> FetchRangeScore(int a_start, int a_count)
{
return Repository.AllQueryable()
.Where(m => m.Domain == Database.Enums.ImageDomain.Gfycat)
.OrderByDescending(m => m.Score)
.Skip(a_start).Take(a_count);
}
Một số dữ liệu giả có thể giúp minh họa quan điểm của bạn tại đây. – neontapir
Tôi khuyên bạn nên đặt các phiên bản riêng biệt của logic của bạn (hoặc đoạn mã thứ hai của những gì bạn đã thay đổi). Có thể khó theo dõi các nhận xét bên trong mã cần thay đổi (ví dụ: tôi không thể biết được ví dụ của bạn bị hỏng hay hoạt động chính xác). – Guvante
Có lý do nào khiến bạn phân trang trước khi bạn gọi riêng biệt không? Tôi thường mong đợi thứ tự ngược lại. – Guvante