【发布时间】:2014-07-31 15:00:26
【问题描述】:
我有以下场景:
一个搜索框可以根据我的一张表中的 3 个不同条件进行搜索 (OR) Contiditon 1) Name + MiddleName + LastName (这三个都是不同的表列) Contiditon 2) LegalName (另一栏) Contiditon 3) 文档(另一栏)
我正在尝试使用 LINQ 创建一个查询,该查询可以获取单独搜索每个字段的结果,但是我在多个搜索词场景中遇到了问题。
说有人搜索“foo bar”。我希望查询返回条件 1、2 或 3 中包含 foo AND bar(以任何顺序)的任何人 如果第一个条件不是连接 3 个单独的字段,我认为这会很容易,但事实并非如此。
到目前为止我有这个:
var searchTerms = "foo bar";
foreach (var splitValue in searchTerms.Split(' '))
{
var val = splitValue;
query =
query.Where(
p =>
(p.Name + (p.MiddleName != null ? " " + p.MiddleName : string.Empty) +
(p.LastName != null ? " " + p.LastName : string.Empty)).Contains(val)
|| (p.LegalName ?? string.Empty).Contains(val)
|| (p.Document ?? string.Empty).Contains(val));
}
这将返回在 3 个条件中的任何一个中包含 foo 和 bar 的结果,但是我想要在至少一个条件中包含 foo 和 bar 的结果。
您认为可以在 LINQ 中编写我想要的查询吗?
【问题讨论】:
-
不过,您可能需要以扩展方法的形式创建一个有用的工具来执行此操作。
-
@AgentFire 我不认为创建扩展会是一个问题,问题是即使使用单独的方法我也无法提出解决方案。也许有人会想出一些可以引导我更接近解决方案的想法。感谢您的意见。
标签: .net linq linq-to-sql