按国家代码搜索国家/地区

时间:2013-10-07 08:02:16

标签: c# asp.net-mvc-4 country-codes

我正在研究一种搜索方法,它将使用Ajax调用,并在Mvc4中更新Webgrid。 搜索将遍历Project对象列表,其中包含一些字段。

其中一个字段是Country。现在我的代码只检查输入字符串是否包含搜索字符串:

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”,它应该告诉它等于丹麦。

我希望我能得到一些帮助。 感谢。

// UPDATE !!

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;
    }

非常感谢。

2 个答案:

答案 0 :(得分:1)

可能你可以使用RegionInfo:

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

答案 1 :(得分: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));

这将返回每个Country名称或代码text。{除非您使用[Required]数据注释,否则检查空值非常重要,如果您不希望它不区分大小写,则可以删除.ToLowerInvariant()