试图跳过 foreach 语句 C# 中的列
Trying to skip a column in a foreach statement C#
我正在开发一个库存管理程序。数据库和 Table 系统的设置方式是每个类别都是不同的 table。这是必要的,因为每个类别(即鞋子、手机、笔记本电脑)都有不同的字段来唯一标识每个产品。因此,我创建了一个 table,然后通过 foreach 语句添加了用户命名的列。我遇到的问题是它想在 ID 列已经存在时添加它。我尝试添加嵌套在 foreach 中的 If 语句,但它只是不断打破 foreach 循环。我只是还没有找到一种方法让它跳过 ID 列并继续通过每一列进行添加。
功能代码如下:
private void btnCreateCategory_Click(object sender, EventArgs e)
{
List<string> FieldNames = new List<string>();
foreach (var item in lstFieldNames.Items)
{
FieldNames.Add(lstFieldNames.Items.ToString());
}
DataTable NewCategory = new DataTable();
NewCategory = CreateTable(FieldNames);
dgPreviewAdd.DataSource = NewCategory;
using (SqlConnection Connection = new SqlConnection(
Helper.cnnVal("InventoryManager")))
{
using (SqlCommand command = new SqlCommand("", Connection))
{
command.CommandText = "Create Table tbl" +
NewCategory.TableName.ToString() + "(ID int)";
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
foreach (DataColumn newColumn in NewCategory.Columns)
{
If( newColumn.ColumnName("ID")
{
}
Else
{
SqlParameter colparam = new SqlParameter();
colparam.ParameterName = "@ColumnName";
colparam.Value = newColumn.ColumnName.ToString();
SqlParameter tblParam = new SqlParameter();
tblParam.ParameterName = "@TableName";
tblParam.Value = "tbl" + NewCategory.TableName.ToString();
command.Parameters.Add(colparam);
command.Parameters.Add(tblParam);
command.CommandText = "dbo.AddCategoryColumns";
command.CommandType = CommandType.StoredProcedure;
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
}
}
LoadCategory catTableLoad = new LoadCategory();
DataTable catTable = new DataTable();
catTable = catTableLoad.getCategoryTable();
SqlParameter param = new SqlParameter();
param.ParameterName = "@CategoryName";
param.Value = NewCategory.TableName.ToString();
SqlParameter param2 = new SqlParameter();
param2.ParameterName = "@IdNumber";
param2.Value = catTable.Rows.Count + 1;
command.Parameters.Add(param);
command.Parameters.Add(param2);
command.CommandText = "dbo.AddCategory";
command.CommandType = CommandType.StoredProcedure;
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
}
}
}
使用其中之一:
foreach (DataColumn newColumn in NewCategory.Columns)
{
if (newColumn.ColumnName == "ID") continue;
//Rest of logic goes here
}
或者完全从循环中排除:
foreach (DataColumn newColumn in NewCategory.Columns.Where( c => c.ColumnName != "ID" ))
{
//Rest of logic goes here
}
您可以使用 distinct 对类别进行分组
别忘了添加 using System.Linq;
private void btnCreateCategory_Click(object sender, EventArgs e)
{
List<string> FieldNames = new List<string>();
foreach (var item in lstFieldNames.Items)
{
FieldNames.Add(lstFieldNames.Items.ToString());
}
var grpfieldNames = FieldNames.Distinct();
DataTable NewCategory = new DataTable();
NewCategory = CreateTable(grpfieldNames);
dgPreviewAdd.DataSource = NewCategory;
using (SqlConnection Connection = new SqlConnection(
Helper.cnnVal("InventoryManager")))
{
using (SqlCommand command = new SqlCommand("", Connection))
{
command.CommandText = "Create Table tbl" +
NewCategory.TableName.ToString() + "(ID int)";
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
foreach (DataColumn newColumn in NewCategory.Columns)
{
If(newColumn.ColumnName("ID")
{
}
Else
{
SqlParameter colparam = new SqlParameter();
colparam.ParameterName = "@ColumnName";
colparam.Value = newColumn.ColumnName.ToString();
SqlParameter tblParam = new SqlParameter();
tblParam.ParameterName = "@TableName";
tblParam.Value = "tbl" + NewCategory.TableName.ToString();
command.Parameters.Add(colparam);
command.Parameters.Add(tblParam);
command.CommandText = "dbo.AddCategoryColumns";
command.CommandType = CommandType.StoredProcedure;
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
}
}
LoadCategory catTableLoad = new LoadCategory();
DataTable catTable = new DataTable();
catTable = catTableLoad.getCategoryTable();
SqlParameter param = new SqlParameter();
param.ParameterName = "@CategoryName";
param.Value = NewCategory.TableName.ToString();
SqlParameter param2 = new SqlParameter();
param2.ParameterName = "@IdNumber";
param2.Value = catTable.Rows.Count + 1;
command.Parameters.Add(param);
command.Parameters.Add(param2);
command.CommandText = "dbo.AddCategory";
command.CommandType = CommandType.StoredProcedure;
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
}
}
}
我正在开发一个库存管理程序。数据库和 Table 系统的设置方式是每个类别都是不同的 table。这是必要的,因为每个类别(即鞋子、手机、笔记本电脑)都有不同的字段来唯一标识每个产品。因此,我创建了一个 table,然后通过 foreach 语句添加了用户命名的列。我遇到的问题是它想在 ID 列已经存在时添加它。我尝试添加嵌套在 foreach 中的 If 语句,但它只是不断打破 foreach 循环。我只是还没有找到一种方法让它跳过 ID 列并继续通过每一列进行添加。
功能代码如下:
private void btnCreateCategory_Click(object sender, EventArgs e)
{
List<string> FieldNames = new List<string>();
foreach (var item in lstFieldNames.Items)
{
FieldNames.Add(lstFieldNames.Items.ToString());
}
DataTable NewCategory = new DataTable();
NewCategory = CreateTable(FieldNames);
dgPreviewAdd.DataSource = NewCategory;
using (SqlConnection Connection = new SqlConnection(
Helper.cnnVal("InventoryManager")))
{
using (SqlCommand command = new SqlCommand("", Connection))
{
command.CommandText = "Create Table tbl" +
NewCategory.TableName.ToString() + "(ID int)";
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
foreach (DataColumn newColumn in NewCategory.Columns)
{
If( newColumn.ColumnName("ID")
{
}
Else
{
SqlParameter colparam = new SqlParameter();
colparam.ParameterName = "@ColumnName";
colparam.Value = newColumn.ColumnName.ToString();
SqlParameter tblParam = new SqlParameter();
tblParam.ParameterName = "@TableName";
tblParam.Value = "tbl" + NewCategory.TableName.ToString();
command.Parameters.Add(colparam);
command.Parameters.Add(tblParam);
command.CommandText = "dbo.AddCategoryColumns";
command.CommandType = CommandType.StoredProcedure;
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
}
}
LoadCategory catTableLoad = new LoadCategory();
DataTable catTable = new DataTable();
catTable = catTableLoad.getCategoryTable();
SqlParameter param = new SqlParameter();
param.ParameterName = "@CategoryName";
param.Value = NewCategory.TableName.ToString();
SqlParameter param2 = new SqlParameter();
param2.ParameterName = "@IdNumber";
param2.Value = catTable.Rows.Count + 1;
command.Parameters.Add(param);
command.Parameters.Add(param2);
command.CommandText = "dbo.AddCategory";
command.CommandType = CommandType.StoredProcedure;
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
}
}
}
使用其中之一:
foreach (DataColumn newColumn in NewCategory.Columns)
{
if (newColumn.ColumnName == "ID") continue;
//Rest of logic goes here
}
或者完全从循环中排除:
foreach (DataColumn newColumn in NewCategory.Columns.Where( c => c.ColumnName != "ID" ))
{
//Rest of logic goes here
}
您可以使用 distinct 对类别进行分组
别忘了添加 using System.Linq;
private void btnCreateCategory_Click(object sender, EventArgs e)
{
List<string> FieldNames = new List<string>();
foreach (var item in lstFieldNames.Items)
{
FieldNames.Add(lstFieldNames.Items.ToString());
}
var grpfieldNames = FieldNames.Distinct();
DataTable NewCategory = new DataTable();
NewCategory = CreateTable(grpfieldNames);
dgPreviewAdd.DataSource = NewCategory;
using (SqlConnection Connection = new SqlConnection(
Helper.cnnVal("InventoryManager")))
{
using (SqlCommand command = new SqlCommand("", Connection))
{
command.CommandText = "Create Table tbl" +
NewCategory.TableName.ToString() + "(ID int)";
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
foreach (DataColumn newColumn in NewCategory.Columns)
{
If(newColumn.ColumnName("ID")
{
}
Else
{
SqlParameter colparam = new SqlParameter();
colparam.ParameterName = "@ColumnName";
colparam.Value = newColumn.ColumnName.ToString();
SqlParameter tblParam = new SqlParameter();
tblParam.ParameterName = "@TableName";
tblParam.Value = "tbl" + NewCategory.TableName.ToString();
command.Parameters.Add(colparam);
command.Parameters.Add(tblParam);
command.CommandText = "dbo.AddCategoryColumns";
command.CommandType = CommandType.StoredProcedure;
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
}
}
LoadCategory catTableLoad = new LoadCategory();
DataTable catTable = new DataTable();
catTable = catTableLoad.getCategoryTable();
SqlParameter param = new SqlParameter();
param.ParameterName = "@CategoryName";
param.Value = NewCategory.TableName.ToString();
SqlParameter param2 = new SqlParameter();
param2.ParameterName = "@IdNumber";
param2.Value = catTable.Rows.Count + 1;
command.Parameters.Add(param);
command.Parameters.Add(param2);
command.CommandText = "dbo.AddCategory";
command.CommandType = CommandType.StoredProcedure;
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
}
}
}