gpt4 book ai didi

c# - 遍历多个 foreach 循环的问题

转载 作者:行者123 更新时间:2023-11-30 21:08:49 25 4
gpt4 key购买 nike

我有多个 foreach 循环,我通过这些循环从 Facebook 获取用户的工作历史、教育历史并将它们插入数据库:

Result soap = serializer.Deserialize<Result>(ser);
foreach (var item in soap.data)
{
int length = item.education_history.Length;
int lenght2 = item.work_history.Length;

foreach (var edu in item.education_history)
{
length--;
ftr = ftr + "," + edu.name.ToString();
}

foreach (var wrk in item.work_history)
{
lenght2--;
ftr1 = ftr1 + "," + wrk.company_name.ToString();
}

string str1 = "Insert into [Snaps] (Loc_city,Loc_state,Loc_country,Edu_Hist1,Work_Hist1) values ('" + item.current_location.city.ToString() + "','" + item.current_location.state.ToString() + "','" + item.current_location.country.ToString() + "','" + ftr + "','" + ftr1 + "')";
SqlCommand cmd1 = new SqlCommand(str1, con);
cmd1.ExecuteNonQuery();
}

PS: 此代码仅用于测试目的,因此未使用参数化 sql 查询

我遇到的问题是,当我计算父 foreach 循环中第一项的 ftrftr1 的值时

foreach (var item in soap.data)

当我将这些值插入数据库时​​,它会在 item 中附加第二个数组索引并将其保存在数据库中。 ftrftr1 的值也没有得到刷新,它将新值附加到以前的值上

我做错了什么?

谢谢

最佳答案

问题是 ftrftr1 变量在主循环中的每次迭代后都没有被重置,因此值一直是连接到他们。

一种解决方案是在主循环结束时将 ftrftr1 设置为 null 或空字符串:

foreach (var item in soap.data)
{
foreach (var edu in item.education_history)
{
// ...
}

foreach (var wrk in item.work_history)
{
// ...
}

// ...

ftr = null;
ftr1 = null;
}

但是,更简单的方法是使用 Enumerable.Select LINQ 中的方法从 education_historywork_history 数组中提取值列表并使用 String.Join将它们连接成两个字符串:

foreach (var item in soap.data)
{
var educationNames = item.education_history.Select(i => i.name.ToString());
var ftr = String.Join(",", educationNames);

var previousCompaniesNames = item.work_history.Select(i => i.company_name.ToString());
var ftr1 = String.Join(",", previousCompaniesNames);

var statement = "INSERT INTO [Snaps] (Loc_city,Loc_state,Loc_country,Edu_Hist1,Work_Hist1) VALUES (@city, @state, @country, @educationNames, @previousCompaniesNames)";
var command = new SqlCommand(statement, con);
command.Parameters.Add("@city", SqlDbType.VarChar, 255).Value = item.current_location.city.ToString();
command.Parameters.Add("@state", SqlDbType.VarChar, 255).Value = item.current_location.state.ToString();
command.Parameters.Add("@country", SqlDbType.VarChar, 255).Value = item.current_location.country.ToString();
command.Parameters.Add("@educationNames", SqlDbType.VarChar, 4000).Value = ftr
command.Parameters.Add("@previousCompaniesNames", SqlDbType.VarChar, 4000).Value = ftr1
command.ExecuteNonQuery();
}

这样,ftrftr1 变量就会在每次迭代时声明,因此无需手动重置它们的值。

关于c# - 遍历多个 foreach 循环的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9410593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com