Если я использую Select on IQueryable в моем представлении фрейма сущности, я получу 4 элемента.
Если я использую Select на IQueryable.ToList(), я получаю все 36 элементов.
Здесь код функции:
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);
}
Из 36 предметов 2 Субреддиты будут отличаться. Но поскольку только 4 из 36 выбраны из Select(), он находит только 1 отдельный.
Итак, есть ли что-нибудь, что я могу сделать с выражениями LINQ, чтобы получить правильные данные, чтобы работать с отдельным оператором, или мне нужно сделать это в List, прежде чем продолжить с помощью функций Select и Distinct?
Edit:
переместив место подачи заявки от конца до начала всего запроса.
Кажется, он работает правильно. Select возвращает все 36 элементов e.t.c..., что, в свою очередь, делает работу Distinct, так как она может найти более 1 уникального значения.
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);
}