C# 从命名集合MVC中提取键值对
我从松散绑定的razor表单中提取表单值。我不使用强绑定模型的原因是支付值字段和类别是动态的 到达控制器的表单集合数组如下所示:C# 从命名集合MVC中提取键值对,c#,asp.net-mvc,formcollection,C#,Asp.net Mvc,Formcollection,我从松散绑定的razor表单中提取表单值。我不使用强绑定模型的原因是支付值字段和类别是动态的 到达控制器的表单集合数组如下所示: Payment {"1":"120","4":"23","6":"12","8":"120","9":"100"} 我需要像这样拆分数组(当PayCatId=1,Pay=120)(当PayCatId=4,Pay=23)等等 然后我尝试使用下面的逻辑保存到数据库 for (var i = 0; i < pa.Length; i++) { payment.
Payment {"1":"120","4":"23","6":"12","8":"120","9":"100"}
我需要像这样拆分数组(当PayCatId=1,Pay=120)(当PayCatId=4,Pay=23)等等
然后我尝试使用下面的逻辑保存到数据库
for (var i = 0; i < pa.Length; i++)
{
payment.Pay = Convert.ToDecimal(pa[i]);
payment.PayCatId = Convert.ToInt32(pa[i]); (added:how do i get this value from pair?)
payment.PayDate = DateTime.Now;
db.Payments.Add(payment);
db.SaveChanges();
}
for(变量i=0;i
删除了错误位,因为我被告知该方法不适用
我还想知道这是否是实现这一目标的正确和可靠的方法。您可以使用Split、Select和ToDictionary的组合来实现这一点,请参阅代码:
var srt = "\"1\":\"120\",\"4\":\"23\",\"6\":\"12\",\"8\":\"120\",\"9\":\"100\"";
srt.Split(',')
.Select(x => x.Split(':'))
.ToDictionary(x => int.Parse(x[0].Replace("\"","")), x => int.Parse(x[1].Replace("\"","")))
/*
Output:
Dictionary<int, int>(5)
{
{ 1, 120 },
{ 4, 23 },
{ 6, 12 },
{ 8, 120 },
{ 9, 100 }
}
*/
var srt=““1\”:“120\”,“4\”:“23\”,“6\”:“12\”,“8\”:“120\”,“9\”:“100\”;
srt.Split(',')
.Select(x=>x.Split(':'))
.ToDictionary(x=>int.Parse(x[0]。替换(“\”,”),x=>int.Parse(x[1]。替换(“\”,”))
/*
输出:
字典(5)
{
{ 1, 120 },
{ 4, 23 },
{ 6, 12 },
{ 8, 120 },
{ 9, 100 }
}
*/
只需一次循环两个步骤,而不是一个步骤
for (var i = 0; i < pa.Length; i+=2)
{
payment.Pay = Convert.ToDecimal(pa[i]);
payment.PayCatId = Convert.ToInt32(pa[i+1]);
payment.PayDate = DateTime.Now;
db.Payments.Add(payment);
db.SaveChanges();
}
for(变量i=0;i
谢谢@AlbertoMonteiro没过多久我就意识到我需要你的代码贡献too@Diin我很高兴我的贡献是有用的
for (var i = 0; i < pa.Length; i+=2)
{
payment.Pay = Convert.ToDecimal(pa[i]);
payment.PayCatId = Convert.ToInt32(pa[i+1]);
payment.PayDate = DateTime.Now;
db.Payments.Add(payment);
db.SaveChanges();
}