无法在 int32 和字符串之间执行 = 操作。数据行过滤器

Cannot perform = operation between int32 and string. datarow filter

首先,对于我将要进行的解释,我深表歉意,我现在无法访问我的代码,正在使用我的 phone,但我想发布此内容,以便当我可以访问时稍后我希望得到答案。如果我不这样做,我显然会用它的实际作用来更新问题。

我的问题的相关详情: 我正在将一个字符串变量传递给一个方法

在方法内部使用变量作为数据视图的筛选值

我过滤的数据视图列是 varchar

我收到关于无法使用 int32 和字符串执行 = 操作的错误

据我所知,varchar 是字符串,我的变量是作为字符串传递的,因此也必须是一个。

我肯定已经正确地掌握了过滤的语法和用法,因为我已经在很多其他地方使用它,没有任何问题,并且对此进行了广泛的检查。

使用所有语句并且视图列值是 "only numeric" varchar 或变量是 "only numeric" 时是否有一些奇怪的行为?这似乎很奇怪,这可能会产生影响......一个字符串是一个字符串,对吗?

我尝试在列上使用 convert SQL 命令并在变量上使用 .tostring()。这不起作用,即使它起作用了,我仍然想要解释为什么 2 个字符串的行为就像一个是 int。

一个粗略的用法,虽然这里的语法可能是错误的,因为它来自记忆(所以如果它是那么假设它是正确的......见上文)

MyDataView.filter = "MyColumnnName = " + MyVariable; 

到目前为止,根据我的研究,有些人建议输入“... + MyVariable +”;“我试过这个并得到了同样的错误。

非常感谢!

String 值必须用单引号括起来 ' '。所以喜欢:

MyDataView.filter = "MyColumnnName = '" + MyVariable + "'";

如果它不是字符串列,您可以省略它们:

MyDataView.filter = "MyColumnnName = " + MyVariable;

但无论如何我都会使用 Linq-To-DataTable:

DataTable filtered = dataTable.AsEnumerable()
    .Where(row => row.Field<string>("MyColumnnName ") == MyVariable)
    .CopyToDataTable();

由于您可以使用所有 .NET 方法(或您自己的方法),因此更易于维护且功能更强大。