2013-10-07 181 views
0

我正在使用Ajax調用搜索方法,並更新Mvc4中的Webgrid。 搜索將通過包含一些字段的Project對象列表。按國家/地區搜索國家/地區代碼

其中一個字段是國家。

private bool StringStartWith(string input, string searchstring) 
{ 

    bool startwith = false; 
    var inputlist = new List<string>(input.ToLower().Split(' ').Distinct()); 
    var searchList = new List<string>(searchstring.ToLower().Split(' ')); 

    var count = (from inp in inputlist from sear in searchList where inp.StartsWith(sear) select inp).Count(); 
    if (count == searchList.Count) 
     startwith = true; 
    return startwith; 
} 

但我也希望能夠通過國家代碼搜索:而現在,我的代碼,如果輸入的字符串包含搜索字符串僅檢查。所以如果我寫「DK」,它應該說明它等於丹麥。

我希望我能得到一些幫助。 謝謝。

//更新!

iTURTEV答案幫助我使自己的方法正常工作。我只需要更新我的方法,如下所示:

 private bool InputStartWithSearch(string input, string searchstring) 
    { 
     if(searchstring[searchstring.Length-1].Equals(' ')) 
      searchstring = searchstring.Substring(0,searchstring.Length-2); 

     bool startwith = false; 
     var inputlist = new List<string>(input.ToLower().Split(' ').Distinct()); 
     var searchList = new List<string>(searchstring.ToLower().Split(' ')); 

     if (searchstring.Length == 2) 
     { 
      var countryCode = new RegionInfo(searchstring.ToUpper()).EnglishName; 
      if (inputlist.Any(country => country.ToLower().Equals(countryCode.ToLower()))) 
      { 
       return true; 
      } 
     } 
     var count = (from inp in inputlist from sear in searchList where inp.StartsWith(sear) select inp).Count(); 
     if (count == searchList.Count) 
      startwith = true; 
     return startwith; 
    } 

非常感謝。

+1

也許你得到了國家對象的列表?還是數據庫表?您需要某種方式將代碼映射到該國家,但您沒有指定足夠的信息來告訴我們您希望該信息來自哪裏。 – GolezTrol

+0

@GolezTrol是正確的使用數據庫表將節省你所有這一切在世界各地循環,再加上嘗試解釋一點。 –

回答

1

可能是你可以使用RegionInfo:

// returns Bulgaria 
new RegionInfo("BG").EnglishName; 
+0

感謝您的幫助 - 正是我一直在尋找的。 – Moelbeck

+0

歡迎:) 乾杯! – iTURTEV

0

假設:

public class Country { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string IsoCode { get; set; } 
} 

然後:

return x.Countries.Where(q => 
    q.Name != null && q.Name.ToLowerInvariant().Contains(text) || 
    q.IsoCode != null && q.IsoCode.ToLowerInvariant().Contains(text)); 

這將返回有其名稱或代碼textCountry。除非您使用[Required]數據註釋,否則檢查空值是非常重要的,如果您不希望該值不區分大小寫,則可以刪除.ToLowerInvariant()

相關問題