запрос фильтра с использованием списка перечислений типа в ядре Entityframework

#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; }