Добавление предложения where / order by в IQueryable

У меня есть ths для запроса набора записей из БД:

public IQueryable<PointTransactionViewModel> GetPointTransactions(int UserID)
        {
            return
                (
                    from PointTransaction p in entities.PointTransaction
                    join ActivityLog a in entities.ActivityLog
                    on p.TransactionID equals a.TransactionID
                    where p.UserID == UserID
                    select new PointTransactionViewModel
                    {
                        ID = p.TransactionID,
                        Balance = p.Balance,
                        Points = p.Amount,
                        RelatedActivityID = a.ID,
                        When = p.When,
                        Sender = p.SenderUserInfo.CompleteName
                    }
                );
        }

Я хочу добавить дополнительную причину, например эту

var entries = GetPointTransaction(1);
return entries.OrderbyDescending.Where( x => x.When >= start && w.When <= end).
               ( x => x.When);

Однако мне кажется, что мне нужно создать новый запрос из существующего, чтобы это работало. Мне казалось, что эта работа выполняется раньше, без создания нового запроса, во фрагменте кода перед:

 public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize)
        {
            PageIndex = pageIndex;
            PageSize = pageSize;
            TotalCount = source.Count();
            TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);

            this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
        }

Не требует ли приведенный выше код каким-либо образом новый запрос для создания исходного объекта IQueryable? Был ли создан временный объект?

Edit

Это странно, но чтобы заставить его работать, я должен сделать следующее:

IQueryable<ActivityLogEntry> log = activityRepo.GetPointTransaction(userID).
   Where(x => x.PointsEarned == 50);
return log.ToList();

Следующее не будет работать:

var log =  = activityRepo.GetPointTransaction(userID);
log.Where( x => x.PointsEarned == 50);
return log.ToList();

Нет сообщения об ошибке, просто Предложение where кажется проигнорированным (оно также возвращает все данные, у которых PointsEarned не равно 50)

6
задан Extrakun 12 July 2011 в 06:22
поделиться