2017-07-11 14 views
0

現在、検索ボックスを持っているので、何か入力するとそのキーワードが表示されます。しかし、2つのキーワードを入力したい場合は、これらの結合されたキーワードを返し、データベースから検索したいと思います。2つのフィールドの表示からタイプされた検索文字列「ファーストネーム」と「ラストネーム」の組み合わせ

  if (!String.IsNullOrEmpty(searchString)) 
     { 
      result = result.Where(b => 
       b.LastName.Contains(searchString) || b.FirstName.Contains(searchString) 
       || b.Id.ToString().Contains(searchString) 
       || b.Email.Contains(searchString) 
       || b.City.Contains(searchString) 
       || b.State.ToString().Contains(searchString) 
       || b.FirstName.Contains(searchString) 
       || b.FirstName.Contains(searchString) && b.LastName.Contains(searchString) // was trying to do something like this... I tried adding a FullName property and concactenated FirstName and LastName... didn't like it 
       ); 
      ... 
     } 

ビュー:

http://localhost:59818/Broker?SearchString=Some+Name 

何の結果はありませんでした:あなたはそれを示して二つのフィールドで検索

@Html.TextBox("SearchString", ViewBag.CurrentFilter as string, new { @class = "form-control", @placeholder = "Search first name, last name, city, state, ID", @type = "search" }) 

コントローラの私のIndexメソッドで

。明らかにこれを間違って設定していますか?それとも、私の現在のアーキテクチャに従って、組み合わせたキーワードを渡して表示することができますか?ありがとう。

答えて

1

これらの単語を配列に分割する必要があります。

var query = _context.Users.AsQueryable(); 

if (!String.IsNullOrEmpty(searchString)) 
{ 
    string[] collection = searchString.Split(' ', ','); 
    foreach(var item in collection) 
    {  
     query = query.Where(b => 
       b.LastName.Contains(item) 
       || b.FirstName.Contains(item) 
       || b.Id.ToString().Contains(item) 
       || b.Email.Contains(item) 
       || b.City.Contains(item) 
       || b.State.Contains(item)); 
    } 
} 

var result = query.ToList(); 

注:あなたはあまりにも多くのor文を持っている場合は、それがクエリを遅くします。

関連する問題