對於我在做的網站,我們使用的是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