【发布时间】:2021-04-15 19:26:42
【问题描述】:
我有一本字典 Dictionary<string, string>,其中包含一组 KeyValuePairs KVP。
出于此说明的目的,这些信息存储在字典中_test
这些打算用于使用 command.Parameters.AddWithValue(value.key, value.Value)
的 SQL INSERT
但是,这会将所有值插入到 SQL 的一行中,其中预期的结果是多行。_test 中的示例源;
[0] {[Data, ONCE,UPON,A,TIME,UP,AN,ENORMOUS,GREEN,BEANSTALK,IN,THE,CLOUDS]}
[1] {[Ident, 123456789]}
[2] {[Time1, 2020-01-01T13:56:56.123]}
[3] {[Time2, 2020-01-01T13:58:02.356]}
[4] {[D, 57]}
[5] {[D1, 508,967,123,456,234,456,232,124,167,198,985,786]}
[6] {[AC, 1,1,1,1,2,2,2,4,3,3,1,1]}
我希望将这些值根据出现在键 AC 下的值分组拆分为多个字典,因此输出将是;
然后我可以使用foreach 对每个字典进行交互以执行每个插入操作。
dict-1
(包含基于 AC 为 1 的前 4 个值)
dictionary<string,string>
[0] {[Data, ONCE,UPON,A,TIME]}
[1] {[Ident, 123456789]}
[2] {[Time1, 2020-01-01T13:56:56.123]}
[3] {[Time2, 2020-01-01T13:58:02.356]}
[4] {[D, 57]}
[5] {[D1, 508,967,123,456]}
[6] {[AC, 1,1,1,1]}
dict-2
(包含基于 AC 值为 2 的下 3 个值)
dictionary<string,string>
[0] {[Data, UP,AN,ENORMOUS]}
[1] {[Ident, 123456789]}
[2] {[Time1, 2020-01-01T13:56:56.123]}
[3] {[Time2, 2020-01-01T13:58:02.356]}
[4] {[D, 57]}
[5] {[D1, 234,456,232]}
[6] {[AC, 2,2,2]}
dict-3
(包含基于 AC 4 的单个值)
dictionary<string,string>
[0] {[Data, GREEN]}
[1] {[Ident, 123456789]}
[2] {[Time1, 2020-01-01T13:56:56.123]}
[3] {[Time2, 2020-01-01T13:58:02.356]}
[4] {[D, 57]}
[5] {[D1, 124]}
[6] {[AC, 4]}
dict-4
dictionary<string,string>
[0] {[Data, BEANSTALK,IN]}
[1] {[Ident, 123456789]}
[2] {[Time1, 2020-01-01T13:56:56.123]}
[3] {[Time2, 2020-01-01T13:58:02.356]}
[4] {[D, 57]}
[5] {[D1, 167,198]}
[6] {[AC, 3,3]}
dict-5
dictionary<string,string>
[0] {[Data, THE,CLOUDS]}
[1] {[Ident, 123456789]}
[2] {[Time1, 2020-01-01T13:56:56.123]}
[3] {[Time2, 2020-01-01T13:58:02.356]}
[4] {[D, 57]}
[5] {[D1, 985,786]}
[6] {[AC, 1,1]}
他们是使用 Linq 方法或查询语法来做这件事的好方法吗?
【问题讨论】:
-
你有什么尝试吗?请向我们展示尝试某事的努力,否则看起来您向我们提出了您的任务要求。
-
这些打算用于 SQL INSERT 使用 - 不知道您的应用程序的上下文,但我希望有更好的方法将数据插入数据库然后手动使用
VARCHAR类型的所有参数构建 SQL 查询。表中的所有列都是VARCHAR类型的吗? -
您能解释一下您的初始字典是如何初始化的吗?
var _test = new Dictionary<string, string> { { "Data", "ONCE,UPON,A,TIME,UP,AN,ENORMOUS,GREEN,BEANSTALK,IN,THE,CLOUDS"}, { "Ident", "123456789"}, { "Time1", "2020-01-01T13:56:56.123"} { "Time2", "2020-01-01T13:58:02.356"} { "D", "57"} { "D1", "508,967,123,456,234,456,232,124,167,198,985,786"} { "AC", "1,1,1,1,2,2,2,4,3,3,1,1"} }; -
@Fabio CREATE TABLE [dbo].[Test]( [Data] [nvarchar](max) NULL, [Ident] [int] NULL, [Time1] [datetime2](7) NULL, [Time2] [datetime2](7) NULL, [D] [int] NULL, [D1] [nvarchar](max) NULL, [AC] [nvarchar](max) NULL, ) ON [PRIMARY]
-
@Ivan Khorin public static Dictionary
_test = new Dictionary 添加到字典中();然后使用 stringbuilder 构建列和参数列表以构建 sql insert 语句 INSERT INTO test (xxx,xxx) VALUES (@xxx, @xxxx) 值通过在 _test 字典上使用 foreach 循环拉取 Key 和 Value 然后添加使用 sqlCommand.Parameters.AddWithValue(v.Key, v.Value) 值通过使用 _test.Add(xxxxxx)
标签: c# linq dictionary split