2017-12-16 16 views
1

MVC에서 새롭고 데이터베이스에서 와일드 카드 (*,?) 검색을 수행하려고합니다. 이것은 내가 정규식을 사용하여 수행 한 것입니다 :와일드 카드를 Regex로 변환하는 중

컨트롤러 :

using System.Linq; 
using System.Text.RegularExpressions; 
using System.Web.Mvc; 
using WebApplication1.Models; 


namespace WebApplication1.Controllers 
{ 
    public class HomeController : Controller 
    { 

     CrossWord_dbEntities db = new CrossWord_dbEntities(); 

     public ActionResult Index(string searching) 
     { 
      if (searching == null) 
      { 
       searching = "*"; 
      } 
      string regEx = WildcardToRegex(searching); 
      return View(db.tbl_values.ToList().Where(x => Regex.IsMatch(x.Name, regEx, RegexOptions.Singleline)));    
     } 

     public static string WildcardToRegex(string pattern) 
     { 
      return "^" + Regex.Escape(pattern). 
      Replace("\\*", ".*"). 
      Replace("\\?", ".") + "$"; 
     } 
    } 
} 

보기 :

@model IEnumerable<WebApplication1.Models.tbl_values> 

<br /><br /> 
@using (Html.BeginForm("Index", "Home", FormMethod.Get)) 
{ 
@Html.TextBox("searching") <input type="submit" value="Search" /> 
} 

<table class="table table-striped"> 
    <thead> 
     <tr> 
      <th>Results</th> 
     </tr> 
    </thead> 
    <tbody> 
     @if (Model.Count() == 0) 
     { 
      <tr> 
       <td colspan="3" style="color:red"> 
        No Result 
       </td> 
      </tr> 
     } 
     else 
     { 
      foreach (var item in Model) 
      { 
       <tr> 
        <td> 
         @item.Name 
        </td> 
       </tr> 
      } 
     } 

    </tbody> 

</table> 

난 내 데이터베이스 세 recordes에 있습니다 : 안녕하세요, 영웅, 샬롬

"H *"를 입력하면 결과가 표시됩니다. 안녕하세요, Hero -이 훌륭한 작품입니다. 하지만 "* lom"을 입력하면 "Shalom"대신 "No Result"가 표시됩니다 또는 "Hell?"을 입력하면 "Hello"대신 "No Result"가 표시됩니다.

내가 뭘 잘못 했습니까?

감사

답변

0

다음과 같은

Expression<Func<tbl_value, bool>> query = m => 
SqlFunctions.PatIndex(searching.ToLower().Replace("*", "%"), m.Name.ToLower()) > 0; 

var details = db.tbl_values.Where(query); 

희망을 사용할 수있는이 당신에게

도움이 될 것입니다