はちょうど私のバッグO」トリックを拡大しようと、いじり:私はちょうど実験と外と別の内部辞書と辞書オブジェクトのような何かをしたいた辞書の.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が必要です私は後退できるnは私のオリジナルメソッドが正常に動作しますので、それはそれ以上の計算
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と思いました誰かを推測することは頭の中で私を叩くと、配列を使用するように教えてくれる... :)
EDIT @ 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つの辞書オブジェクト、2つの文字列、いくつかのネストされたループ、最初のバージョンよりも読み込みとデバッグが難しく、チェックごとに10行ほど多くなります...これはあなたにのように見える場合は、その後、私は
もあなたが現在不足しているが、このhow to fetch data from nested Dictionary in c#
あなたが正確に求めていることはあまり明確ではありません。 –