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

非常感谢。

4

2 回答 2

1

也许你可以使用 RegionInfo:

// returns Bulgaria
new RegionInfo("BG").EnglishName;
于 2013-10-07T08:35:55.640 回答
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().

于 2013-10-07T08:25:19.567 回答