2

私は全体として C# に不慣れであり、以下に説明する機能をどのように実現するのか疑問に思っていました。現在、これは示された行でコンパイルされていません。コードでやりたいことは次のとおりです。

各 KVP を反復処理し、キー文字列をテーブル名として使用してデータベースをクエリします リストを返します

var dbCon = dbConnectionFactory.OpenDbConnection();
Dictionary<string, Type> ibetDic = getFromSomeWhere();
foreach (KeyValuePair<string, Type> entry in ibetDic)
    {
        Type type = entry.Value;
        var typedRedisClient = redis.GetTypedClient<type>();/*not compiling here*/
        String sql = "USE ibet SELECT * FROM " + entry.Key;
        var itemList = dbCon.SqlList<type>(sql);/*not compiling here*/
        foreach (var tableRow in itemList )
        {
            //store with redistypedclient
        }
    }
4

1 に答える 1

1

私が見つけた答えに最も近いものですが、これは、上記で望んでいたように、辞書を介してアクセスできるのではなく、型を渡す必要があることを意味します:

public void GetAndStoreIntKey<T>(string tableName) where T : IHasId<int>
    {
        var dbCon = dbConnectionFactory.OpenDbConnection();
        String sql = "USE ibet SELECT * FROM " + tableName;
        var items = dbCon.SqlList<T>(sql);
        var typedRedisClient = redis.As<T>();

        foreach (T item in items)
        {
            typedRedisClient.SetEntry(UrnId.CreateWithParts<T>(new string[] {item.Id + ""}), item);
        }
    }

のような使い方:

 GetAndStoreIntKey<Sport>("Sport");
于 2013-07-11T04:45:59.230 に答える