просто бездельничаю, пытаясь расширить мою сумку. Уловки: я просто экспериментировал и хочу сделать что-то вроде объекта Dictionary с другим внутренним словарем в качестве внешнего словаря .Value
var dictionary = new Dictionary<ObjectType, Dictionary<string, string>>();
ObjectType является перечислением
так ... что тогда ... либо вы не должны этого делать, либо я просто не знаю как, потому что я начал врезаться в стену, когда пытался выяснить, как заполнять и получать данные из него.
Цель может помочь: мне передают ObjectGUID, и мне нужно пролистать кучу таблиц базы данных, чтобы определить, в какой таблице существует объект. Метод, который я уже написал, просто запрашивает каждую таблицу и возвращает количество (здесь пара примеров)
// Domain Check
sql = string.Format(@"select count(domainguid) from domains where domainguid = ?ObjectGUID");
count = (int)MySQLHelper.ExecuteScalar(ConnectionStrings.ConnectionStrings.V4DB_READ, sql, pObjectGUID).ToString().Parse<int>();
if (count > 0)
return ObjectType.Domain;
// Group Check
sql = string.Format(@"select count(domaingroupguid) from domaingroups where domaingroupguid = ?ObjectGUID");
count = (int)MySQLHelper.ExecuteScalar(ConnectionStrings.ConnectionStrings.V4DB_READ, sql, pObjectGUID).ToString().Parse<int>();
if (count > 0)
return ObjectType.Group;
Итак, все сделано и работает нормально ... но поскольку имя поля и имя таблицы - это единственные вещи, которые меняются при каждой проверке, я начал думать о том, где можно повторно использовать повторяющийся код, я создал словарь и Цикл foreach, который переворачивает и изменяет строку sql (показано ниже) ... но, как вы можете видеть ниже, мне нужен этот ObjectType как вид ключа для каждой пары таблица / имя поля, чтобы я мог вернуть его без каких-либо дальнейших вычислений
Dictionary<string, string> objects = new Dictionary<string,string>();
objects.Add("domains", "domainguid");
objects.Add("domaingroups", "domaingroupguid");
objects.Add("users", "userguid");
objects.Add("channels", "channelguid");
objects.Add("categorylists", "categorylistguid");
objects.Add("inboundschemas", "inboundschemaguid");
objects.Add("catalogs", "catalogguid");
foreach (var item in objects)
{
sql = string.Format(@"select count({0}) from {1} where {0} = ?ObjectGUID", item.Value, item.Key);
count = (int)MySQLHelper.ExecuteScalar(ConnectionStrings.ConnectionStrings.V4DB_READ, sql, pObjectGUID).ToString().Parse<int>();
if (count > 0)
return ?????
}
Это не так уж важно, так как мой оригинальный метод работает просто отлично, но я подумал, что вы, фанаты StackOverflow, можете включить меня в некоторые новые умные идеи для исследования ... Я предполагаю, что кто-то собирается ударить меня по голове и скажи мне использовать массивы ...:)
РЕДАКТИРОВАТЬ @ Jon Skeet ------------------------------------------
Хе, сладкий, думаю, я мог бы найти правильный способ сделать это ... еще не запускал, но вот пример, который я написал для вас
var objectTypes = new Dictionary<string, string>();
objectTypes.Add("domainguid", "domains");
var dictionary = new Dictionary<ObjectType, Dictionary<string, string>>();
dictionary.Add(ObjectType.Domain, objectTypes);
foreach(var objectType in dictionary)
{
foreach(var item in objectType.Value)
{
sql = string.Format(@"select count({0}) from {1} where {0} = ?ObjectGUID", item.Key, item.Value);
count = (int)MySQLHelper.ExecuteScalar(ConnectionStrings.ConnectionStrings.V4DB_READ, sql, pObjectGUID).ToString().Parse<int>();
if (count > 0)
return objectType.Key;
}
}
Этот кусок должен попасть в таблицу доменов в поисках domainguid, а если count> 0, вернуть ObjectType.Domain ... выглядеть правильно? Единственная проблема, хотя это может показаться несколько умным, это как 2 словарных объекта, пара строк, несколько вложенных циклов, труднее читать и отлаживать, чем моя первая версия, и примерно на 10 строк на проверку хе-хе ... интересно экспериментировать, хотя и если это похоже на вас, то, думаю, это еще одна вещь, которую я могу добавить в свой мозг:)
также нашел это как извлечь данные из вложенного словаря в c #