[LINQ]查詢字串裡面的多個關鍵字

  • 311
  • 0

[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