2013-10-07 184 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()

相关问题