我正在研究一种搜索方法,它将使用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;
}
非常感谢。
答案 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()
。