[LINQ]查詢字串裡面的多個關鍵字
linq有時候進行db查詢資料功能的時候會需要有(關鍵字查詢)功能,就像是谷歌查詢一樣,會用空格分隔多個關鍵字
C#範例程式如下:
using (MyEntities db = new MyEntities())
{
List<string> keyWordList = new List<string>();
//變數model.SearchKeyWord是在畫面上,使用者輸入的關鍵字查詢
//可輸入單一關鍵字,也可跟google查詢一樣輸入多個關鍵字(以空格分隔多個關鍵字)
//例如:sony 手機 旗艦機
if (!string.IsNullOrEmpty(model.SearchKeyWord))
{
keyWordList = model.SearchKeyWordd.Trim().Split(' ').ToList();
}
var query = from m in db.tblMyTable
//關鍵字
//ToLower()的部分,可自行決定是否加上去(會導致查詢效能變差)
where keyWordList.Count() > 0 ?
keyWordList.
//沒有ToLower版本(查詢效能較好)
All(w => m.ColumnNo1.Contains(w)) : true
//有ToLower版本(查詢效能差很多,但有時候是有他的必要性在)
//All(w => m.ColumnNo1.ToLower().Contains(w.ToLower())) : true
select new MyModel
{
ColunmA = m.ColumnNo1,
ColunmB = m.ColumnNo2,
ColunmC = m.ColumnNo3,
};
}
大概是這樣……
參考資料:
https://stackoverflow.com/questions/11560921/linq-query-to-match-multiple-words
https://social.msdn.microsoft.com/Forums/en-US/d28e511b-7af9-4602-898f-e00383a95fd6/linq-multi-keyword-search-to-match-any-of-the-keyword?forum=aspadoentitylinq