我的数据表工资列是string
列,用户以字符串格式提供输入值,例如userInput="1000"
。但是存储在薪水栏中的数据如下图所示。如何将用户输入与存储在数据表中的数据进行比较?
我目前的代码是
DataRows[] rows = dt.Select("Salary='"+userInput+"'");
答案 0 :(得分:3)
我会使用Linq-To-DataTable:
decimal value;
if(decimal.TryParse(userInput, out value))
{
var filteredRows = from row in dt.AsEnumerable()
where row.Field<decimal>("Salary") == value
select row;
// if you want an array:
DataRow[] rows = filteredRows.ToArray();
}
如果您坚持使用DataTable.Select
,则必须删除撇号:
DataRow[] rows = table.Select("Salary=" + userInput);
但是这假设输入值使用的是英文格式(所以f.e.不使用逗号等不同的小数分隔符,甚至会导致SyntaxErrorException
)。
如果列的类型实际为string
,则需要将其解析为double或decimal:
var filteredRows = from row in dt.AsEnumerable()
where decimal.Parse(row.Field<string>("Salary")) == value
select row;
但是在这个cae中你应该更好地修复错误的数据类型。
答案 1 :(得分:0)
为避免格式化问题,您应该更好地比较数值。 DataTable选择过滤器支持Convert
功能:
var dt = new DataTable();
dt.Columns.Add("Salary", typeof(string));
// test values
dt.Rows.Add("0.10000");
dt.Rows.Add(".1");
dt.Rows.Add("-.1");
dt.Rows.Add("1.1");
decimal salary;
string userInput = "0.10";
if (decimal.TryParse(userInput, out salary))
{
DataRow[] matchedRows = dt.Select("Convert(Salary, 'System.Decimal') = " + salary.ToString());
foreach(var r in matchedRows)
Console.WriteLine(r["Salary"]);
}
输出是:
.1
0.10000