удалить несколько элементов (Id) из результатов - PullRequest
0 голосов
/ 29 августа 2018

я пытаюсь удалить несколько элементов из результатов запроса, используя linqCore, но не удаляет их код и результаты

 IQueryable<int> postOn = //Results=9(Id)
                        _context.QuettaOffers.Where(d => d.SiteUserId == LoguserId).Select(s => s.QuettaReqId);

                    //Get all request that relevant to user without the one he already post on 
                    IOrderedEnumerable<QuettaReq> listOfR = //Results= 9,11 (Id) should be ..11(Id)
                        //IQueryable<QuettaReq> listOfR
                        _context.Quetta.Include(q => q.Category)
                            .Where(d => d.OfferDate > DateTime.Now && d.CatId == suplayerCat)
                            .ToList()
                            //.ToList()
                            .SkipWhile(a => a.Id.Equals(postOn))
                            .OrderBy(x => x.Id);
                    //  .TakeWhile(a => a.Id != postOn);

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

SkipWhile будет пропускать только элементы в начале IEnumerable<T>.. Если это условие не будет выполнено, оно с радостью примет остальные элементы. Другие элементы, которые позже соответствуют этому, не будут пропущены. вместо SkipWhile вы можете использовать Except

var result = QueryResult.Except(a => a.Id.Equals(Id here));
0 голосов
/ 29 августа 2018

Есть несколько проблем с вашим кодом.

Во-первых, 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))

Дополнительным преимуществом будет фильтрация на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...