我有一个数据表,其中包含一些0的值。现在我想用null或“”替换所有0。
示例数据表
A B C
6 0 7
0 7 0
5 0 4
预期
A B C
6 7
7
5 4
我可以通过for循环来实现,但是可以通过LINQ吗?
答案 0 :(得分:3)
你必须做这样的事情。
//I am constructing a data table here. You already have this I guess.
var dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("A", typeof(int)) { AllowDBNull = true });
dataTable.Columns.Add(new DataColumn("B", typeof(int)) { AllowDBNull = true });
dataTable.Columns.Add(new DataColumn("C", typeof(int)) { AllowDBNull = true });
//Assign values
DataRow row1 = dataTable.NewRow();
row1["A"] = 6;
row1["B"] = 0;
row1["C"] = 7;
dataTable.Rows.Add(row1);
DataRow row2 = dataTable.NewRow();
row2["A"] = 0;
row2["B"] = 7;
row2["C"] = 0;
dataTable.Rows.Add(row2);
DataRow row3 = dataTable.NewRow();
row3["A"] = 5;
row3["B"] = 0;
row3["C"] = 4;
dataTable.Rows.Add(row3);
//This is what you need.
foreach (DataRow row in dataTable.Rows)
{
if ((int)row["A"] == 0)
{
row["A"] = DBNull.Value;
}
if ((int) row["B"] == 0)
{
row["B"] = DBNull.Value;
}
if ((int) row["C"] == 0)
{
row["C"] = DBNull.Value;
}
}
//test the changes
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine("" + row["A"] + "; " + row["B"] + "; " + row["C"]);
}
答案 1 :(得分:2)
由于LINQ
支持查询而不是更新,因此您可以做的最好的事情是利用其查询来获取DataTable
的所有列信息,然后逐个更新您的单元格。
一种方法是实现一个输入为DataTable
的方法来完成任务:
private void dtChangeZeroToNull (DataTable dataTable){
List<string> dcNames = dataTable.Columns
.Cast<DataColumn>()
.Select(x => x.ColumnName)
.ToList(); //This querying of the Column Names, you could do with LINQ
foreach (DataRow row in dataTable.Rows) //This is the part where you update the cell one by one
foreach (string columnName in dcNames)
row[columnName] = (int)row[columnName] == 0 ? DBNull.Value : row[columnName];
}
然后你去。
现在,要在0
中将价值为DBNull
的每个单元格更改为DataTable
,您只需调用该方法:
dtChangeZeroToNull (dataTable);
注意:似乎DataTable.Rows
和DataTable.Columns
没有实现LINQ
Select
。否则我们可以马上做到这一点
List<string> dtcolumnNames = dataTable.Columns.Select(x => x.ToString());
无需Cast<DataColumn>