簡體   English   中英

在C#中的字符串列表中轉換字典

[英]Convert Dictionary in List of of strings in C#

我有以下代碼:

var parameters = new Dictionary<string, object>();
parameters.Add("param1", 100);
parameters.Add("param2", "ABC");
parameters.Add("param3", 1.2);

我需要以最大的性能生成以下代碼,可以使用Linq,Lambda等。!

var tableName = "table1"
var fields = "param1, param2, param3";
var values = "@param1, @param2, @param3"

var result = String.Format("INSERT INTO {0} ({1}) VALUES ({2})", tableName, fields, values);

...執行Sql AddParamWithValue ....(沒關系,我可以做到...)

好的,所以,我做了一些測試,string.join的工作原理非常好:

param = string.Join(",", parameters.Keys);
value = string.Join(",", parameters.Values);

這是我的測試功能:

private static void RunLoopTester()
        {
            Console.WriteLine("Building dictionary...");
            var parameters = new Dictionary<string, string>();
            for(var i = 0;i< 10000;i++)
            {
                parameters.Add(string.Format("param{0}",i),string.Format("value{0}", i));
            }
            var stopWatch = new Stopwatch();
            Console.WriteLine("Using foreach statement...");
            stopWatch.Start();
            var param = string.Empty;
            var value = string.Empty;
            foreach(var k in parameters.Keys)
            {
                param += string.Format("{0}{1}", string.IsNullOrEmpty(param) ? string.Empty : ",", k);
                value += string.Format("{0}{1}", string.IsNullOrEmpty(value) ? string.Empty : ",", parameters[k]);

            }
            stopWatch.Stop();
            Console.WriteLine("Elapsed Time: {0}", stopWatch.ElapsedMilliseconds);
            Console.WriteLine("Using simple syntax...");
            param = string.Empty;
            value = string.Empty;
            stopWatch.Reset();
            stopWatch.Start();
            param = string.Join(",", parameters.Keys);
            value = string.Join(",", parameters.Values);
            stopWatch.Stop();
            Console.WriteLine("Elapsed Time: {0}", stopWatch.ElapsedMilliseconds);
            Console.ReadLine();
        }

結果:

Pick your tester:
1: Timer Test
2: Loop Tester
2
Building dictionary...
Using foreach statement...
Elapsed Time: 1249
Using simple syntax...
Elapsed Time: 1

編輯:接受的帖子。 OP提到proc參數需要@param。 可以將其放在字典的鍵中(更好),或者如果不能,則可以替換為:

param = string.Join(",", parameters.Keys);

帶有:

param = string.Join(",", parameters.Keys).Replace("param","@param");

這會將時間增加到2毫秒。 我嘗試在可枚舉的鍵上使用linq select,但這將時間增加到4毫秒。 因此,替換性能更高。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM