一尘不染

实体框架动态Lambda执行搜索

sql

我在以下实体中Entity Framwork 5 (C#)

OrderLine - Id, OrderId, ProductName, Price, Deleted

Order - Id, CustomerId, OrderNo, Date

Customer - Id, CustomerName

在订单搜索屏幕上,用户可以输入以下搜索值:

ProductName, OrderNo, CustomerName

例如,他们可以输入:

Product Search Field: 'Car van bike'

Order Search Field: '100 101 102'

Customer Search Field: 'Joe Jack James'

这应该对每个输入的单词进行OR搜索(最好使用linq到实体),此示例将在以下sql中输出以下内容。

(ProductName like 'Car' Or ProductName like 'van' Or ProductName like 'bike') AND

(OrderNo like '100' Or OrderNo like '101' Or OrderNo like '102') AND

(CustomerName like 'Joe' Or CustomerName like 'Jack' Or CustomerName like 'James')

我想对实体使用linq来做到这一点,我猜测这将需要某种动态的lambda构建器,因为我们不知道用户可能在每个字段中输入多少个单词。

我将如何进行此操作,我已经进行了快速浏览,但看不到任何简单的内容。


阅读 115

收藏
2021-05-16

共1个答案

一尘不染

您可以使用Expression Trees构建lambda表达式。您需要做的就是拆分值并构建表达式。然后,您可以像这样将其转换为lambda表达式,

var lambda = Expression.Lambda<Func<object>>(expression);

是一个例子

2021-05-16