对于我在做的网站,我们使用的是LINQ to Entities。我一直在向网站添加搜索功能。我试图找出最优雅的方式来搜索数据库中单个字段上的多个关键字(用户输入)。请允许我举个例子。LINQ to Entities搜索多个关键字的文本属性
表列:
Name, Description
实例行:
"Cookie monster", "Fluffy, likes cookies and blue"
用户搜索(分隔符无所谓):
"blue fluffy"
目前我使用如下:
public List<SesameCharacters> SearchByKeywords(string keywords)
{
List<SesameCharacters> output = new List<SesameCharacters>();
string[] k = keywords.ToLower().Split(' ');
using (SesameStreet_Entities entities = new SesameStreet_Entities())
{
IQueryable<SesameCharacters> filter = entities.SesameCharacters;
foreach (string keyword in k)
filter = ForceFilter(filter, keyword);
output = filter.ToList();
}
return output;
}
private IQueryable<SesameCharacters> ForceFilter(IQueryable<SesameCharacters> filter, string keyword)
{
return filter.Where(p => p.Description.ToLower().Contains(keyword));
}
这目前正如预期的那样工作,但我想这不是解决问题的最佳方案。我是否缺少明显的东西?
NOTE:这是AND
的匹配。
古怪,答案在这里,我投它,然后因为我认为这是错误的,然后去投票支持,因为它是正确的,现在它已经消失了。 – jfar 2009-02-18 05:07:19
是的,有一个来自casperOne的答案,但是有人必须有它的答案。他建议使用一个存储过程,这正是我们现在正在倾向的过程。 – 2009-02-18 20:18:01
我处于相同的情况......您是否找到LinqToEntities的解决方案,或者最终使用存储过程? – Kjensen 2009-06-13 16:46:35