Есть несколько проблем с вашим кодом.
Во-первых, SkipWhile
/ TakeWhile
бесполезны для неупорядоченных последовательностей, которые обычно являются результатом запросов EF, за исключением того, что они включают явный OrderBy
. Стандартный и более подходящий метод фильтрации - Where
.
Во-вторых, a.Id.Equals(postOn)
разрешается до object.Equals
, а поскольку a.Id
равно int
и postOn
равно IQueryable<int>
, оно всегда оценивается как false
.
Что вам действительно нужно, так это дополнительное условие Where
, основанное на !Contains
. Это может быть &&
до текущего Where
или просто отдельный Where
(эти конструкции обрабатываются одинаково):
_context.Quetta.Include(q => q.Category)
.Where(d => d.OfferDate > DateTime.Now && d.CatId == suplayerCat)
.Where(q => !postOn.Contains(q.Id))
Дополнительным преимуществом будет фильтрация на стороне сервера.