LINQ OR谓词

时间:2018-07-08 14:59:24

标签: entity-framework linq entity-framework-core

我正在基于用户输入建立查询。用户有三个选项:

搜索租赁

  • 租赁价格
  • 其他租赁选项

搜索出售

  • 销售价格
  • 其他销售方式

搜索租赁还是出售

我使用的是建立IQueryable<PropertyListings>的传统流程,具体取决于是否提供了搜索参数:

if(lease.Price.HasValue)      
   query = query.Where(listing => listing.minLeasePrice <= lease.Price.Value);

if(lease.OtherProperty.HasValue)  
   query = query.Where(listing => listing.leaseProperty == lease.OtherLeaseProperty.Value);

类似的销售逻辑...

if(sale.Price.HasValue)  
   query = query.Where(listing => listing.minSalePrice <= sale.Price.Value);

if(sale.OtherSaleProperty.HasValue)  
   query = query.Where(listing => listing.saleProperty == lease.OtherProperty.Value);

如果用户仅搜索租赁或出售,则查询仅对每个属性进行“与”运算,这是我的预期行为。

但是,当用户同时提供租赁和销售的搜索属性时,就会出现问题。在这种情况下,我需要具备以下条件:

 (leaseProperty01 AND leaseProperty02) OR (saleProperty01 AND saleProperty02)

但是我得到:

 (leaseProperty01 AND leaseProperty02) AND (saleProperty01 AND saleProperty02)

看来LinqKit中的PredicateBuilder完成了我想做的事情,但是它依赖于EF 6.2,而我没有使用它。

我还可以使用其他针对EF Core 2的库吗?如果没有,我将如何手动创建谓词?

0 个答案:

没有答案