filter query using list of Enum type in Entityframework core

Viewed 539

I have an issue filtering the query using a list of enum type

public enum Offer{
  
    None=1,
    all,
    stop
}

Class Emp{
[Column(TypeName = "jsonb")]
 public list<Offer> 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 Task<List<Emp>> ListEmp( List<Offer> offer ){

var query= catalogDb.Emp.Include(a=>a.D)

              .Where(a=>a.Name="xyz")

              .AsQueryable();


   if(offer.count>0){

     // need a query for filter offer column using multiple List<Offer> parameters

      **query=query.Where(i=>i.Offers.Contains(offer))**
     
     // can filter only one value USING CONTAINS
   }

 return await query.ToListAsync();

}

I need a query to filter the offer column with multiple parameters before using query.ListAsync()

public list<Offer> offer can accept null value as well

Database table name same as class name

we store multiple values. that's why we use List type Offer field response save that column like

[1,2] or [], [1,2,3], [2]

2 Answers

Your offer variable is a list of Offer values, but the List<T>.Contains method expects a single Offer value.

Try:

if (offer.Count > 0)
{
    query = query.Where(i => i.Offers.Any(o => offer.Contains(o)));
}
if(offer.Count>0){

   var result=query.AsEnumerable()
         .Where(y => y.Offers.Any(z => offer.Contains(z)))
          .ToList();
           return result;
}
Related