2013-10-07 2 views
0

Я работаю над методом поиска, который будет вызываться с помощью Ajax и обновляет Webgrid в Mvc4. Поиск будет проходить через список объектов 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», он должен сказать, что он равен Дании.

Надеюсь, я смогу помочь. Спасибо.

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

Большое спасибо.

+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)); 

Это будет возвращать каждый Countrytext имея на своем имени или кода. Важно проверить нулевые значения, если вы не используете аннотацию данных [Required], если вы не хотите, чтобы это было нечувствительным к регистру, вы можете удалить .ToLowerInvariant().