(较早的问题Recursively (?) compose LINQ predicates into a single predicate与此类似,但我实际上问错了问题......那里的解决方案满足了提出的问题,但实际上并不是我需要的。他们不过是不同的。诚实的。)
给定以下搜索文本:
"keyword1 keyword2 ... keywordN"
我想以以下 SQL 结束:
SELECT [columns] FROM Customer
WHERE (
Customer.Forenames LIKE '%keyword1%'
OR
Customer.Forenames LIKE '%keyword2%'
OR
...
OR
Customer.Forenames LIKE '%keywordN%'
) AND (
Customer.Surname LIKE '%keyword1%'
OR
Customer.Surname LIKE '%keyword2%'
OR
....
OR
Customer.Surname LIKE '%keywordN%'
)
实际上,我们将搜索文本拆分为空格,修剪每个标记,基于 each 构造一个多部分 OR 子句,然后将这些子句“与”在一起。
我在 Linq-to-SQL 中执行此操作,但我不知道如何根据任意长的子谓词列表动态组合谓词。对于已知数量的子句,手动组合谓词很容易:
dataContext.Customers.Where(
(
Customer.Forenames.Contains("keyword1")
||
Customer.Forenames.Contains("keyword2")
) && (
Customer.Surname.Contains("keyword1")
||
Customer.Surname.Contains("keyword2")
)
);
简而言之,我需要一种技术,在给定两个谓词的情况下,将返回一个由提供的运算符组成两个源谓词的单个谓词,但仅限于 Linq-to-SQL 明确支持的运算符。有任何想法吗?