Давайте сделаем ленивую загрузку для этого!
private Dictionary<string, Country> _countryNames = null;
public Dictionary<string, Country> CountryNames
{
get
{
if(_countryNames == null)
{
_countryNames = new Dictionary<int, Country>();
foreach(var country in GetCountries())
{
_countryNames.Add(country.Name, country)
}
}
return _countryNames;
}
}
public static int GetCountryId(string countryName)
{
Country result;
CountryNames.TryGetValue(countryName, out result);
if (result == null) return 0;
return result.Id;
}
private static IEnumerable<Country> GetCountries()
{
string query = "SELECT Id, Name FROM Countries";
return Common.GetCollection<Country>(Properties.Settings.Default.DbConnectionString, query);
}
Но обычно даже лучше позволить базе данных делать свое дело: запускать запрос там, где необходимо, где вы передаете строку фильтра в базу данных,К сожалению, Common.GetCollection<T>()
скрывает эту способность от нас.Переменная query
должна выглядеть примерно так:
string query = "SELECT Id, Name FROM Countries WHERE Name = @CountryName";
, но из поставленного здесь вопроса не ясно, как задать значение параметра @CountryName
. НЕ нужно всего лишь использовать подстановку строк или интерполяцию, чтобы включить значение непосредственно в строку запроса.Это было бы очень плохо ;он создает серьезную форму безопасности, выпущенную под названием SQL-инъекция.