【问题标题】:filter query using list of Enum type in Entityframework core使用 Entityframework 核心中的枚举类型列表过滤查询
【发布时间】:2021-12-02 12:45:31
【问题描述】:

我在使用枚举类型列表过滤查询时遇到问题

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();

}

在使用 query.ListAsync()之前,我需要一个查询来过滤带有多个参数的offer

public list&lt;Offer&gt; offer 也可以接受空值

数据库表名与类名相同

我们存储多个值。这就是为什么我们使用 List 类型的 Offer 字段响应保存该列,如

[1,2] 或 [], [1,2,3], [2]

【问题讨论】:

    标签: sql postgresql asp.net-web-api entity-framework-core linq-to-entities


    【解决方案1】:

    您的offer 变量是Offer 值的列表,但List&lt;T&gt;.Contains 方法需要一个Offer 值。

    试试:

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

    【讨论】:

    • 我需要过滤所有商品参数值的查询。有没有办法写查询?
    • 那么像.Where(i =&gt; offer.All(o =&gt; i.Offers.Contains(o))) 这样的?
    • offer是jsonb类型的列
    • @AGMohamed 您的问题中没有提到该信息。如果您将多个值存储在数据库的单个列中,那么您将需要加载所有记录并在内存中进行过滤。
    • @Richard Deeming 我们存储多个值。这就是为什么我们使用 List 类型的 Offer 字段响应保存该列,如 [1,2] 或 []、[1,2,3]、[2] ...您知道查询将如何吗?
    【解决方案2】:
    if(offer.Count>0){
    
       var result=query.AsEnumerable()
             .Where(y => y.Offers.Any(z => offer.Contains(z)))
              .ToList();
               return result;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      相关资源
      最近更新 更多