#sql #postgresql #asp.net-web-api #entity-framework-core #linq-to-entities
Вопрос:
У меня проблема с фильтрацией запроса с использованием списка типа перечисления
public enum Offer{ None=1, all, stop } Class Emp{ [Column(TypeName = "jsonb")] public listlt;Offergt; offer { get; set; } public D d { get; set } public string FullName { get; set } } class D { public string age { get; set } public string countryCode { get; set } } public async Tasklt;Listlt;Empgt;gt; ListEmp( Listlt;Offergt; offer ){ var query= catalogDb.Emp.Include(a=gt;a.D) .Where(a=gt;a.Name="xyz") .AsQueryable(); if(offer.countgt;0){ // need a query for filter offer column using multiple Listlt;Offergt; parameters **query=query.Where(i=gt;i.Offers.Contains(offer))** // can filter only one value USING CONTAINS } return await query.ToListAsync(); }
Мне нужен запрос для фильтрации offer
столбца с несколькими параметрами перед использованием query.ListAsync()
public listlt;Offergt; offer
может также принимать нулевое значение
Имя таблицы базы данных совпадает с именем класса
мы храним несколько значений. вот почему мы используем ответ на поле предложения типа списка, сохраните этот столбец следующим образом
[1,2] или [], [1,2,3], [2]
Ответ №1:
Ваша offer
переменная представляет собой список Offer
значений, но Listlt;Tgt;.Contains
метод ожидает одно Offer
значение.
Попробуй:
if (offer.Count gt; 0) { query = query.Where(i =gt; i.Offers.Any(o =gt; offer.Contains(o))); }
Комментарии:
1. Мне нужно отфильтровать запрос по всем значениям параметров предложения. Есть ли какой-нибудь способ написать запрос?
2. Значит, что-то вроде
.Where(i =gt; offer.All(o =gt; i.Offers.Contains(o)))
этого?3. предложение представляет собой столбец типа jsonb
4. @AGMohamed Эта информация нигде не упоминается в вашем вопросе. Если вы храните несколько значений в одном столбце базы данных, вам потребуется загрузить все записи и отфильтровать их в памяти.
5. @ Ричард Считает, что мы храним несколько значений. вот почему мы используем ответ поля предложения типа списка, сохраните этот столбец как [1,2] или [], [1,2,3], [2] … знаете ли вы, каким будет запрос?
Ответ №2:
if(offer.Countgt;0){ var result=query.AsEnumerable() .Where(y =gt; y.Offers.Any(z =gt; offer.Contains(z))) .ToList(); return result; }