我正在基于用户输入建立查询。用户有三个选项:
搜索租赁
搜索出售
搜索租赁还是出售
我使用的是建立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的库吗?如果没有,我将如何手动创建谓词?