gpt4 book ai didi

c# - DataRow 列和字符串值比较

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:54 25 4
gpt4 key购买 nike

我有以下问题。我将值作为 XML(如字符串)进行传递,并且不会为数字列传递默认值,例如 false 或 0。因此,我创建了一个字典,其中键是列名,值是传递的值。

这是我当前的代码

foreach (KeyValuePair<String, String> kvp in rowValues)
{
String passedValue = kvp.Value.Trim();
String rowValue = bookingRow[kvp.Key].ToString().Trim();
if (passedValue != rowValue)
{
// code here
}
}

问题出在默认值上。通过调试我的测试用例,我可以看到 passedValue 为空,rowValue 为 0(列为整数类型)。所以,我的问题是——我应该如何重写上面的代码以正确地将我传递的值转换为列的类型。换句话说,我不需要将它们都转换为字符串,而是需要将传递的值转换为正确类型的 DataRow 列。

传递值的示例 - “”。

rowValue = ""的示例(具有列长度的空字符串)

或者另一个例子:

passedValue = ""的示例

对应rowValue = 0(表中值为Integer)

这两种情况都应视为相同的值 - 无需写入历史记录。

感谢您的回答,我现在正在测试这段代码:

String passedValue = kvp.Value.Trim();
var rowValue = bookingRow[kvp.Key];
if (Convert.ChangeType(passedValue, rowValue.GetType()) != rowValue)
{
String rowValueString = rowValue.ToString().Trim();
if (rowValueString!=passedValue) // Double check to prevent cases of "" vs. " "
this.SaveToBookingHistory(booking_id, "M", kvp.Key, rowValueString, passedValue, ref messageText, ref statusCode);
}

最佳答案

我没有你所有的代码,所以这可能不完全正确;但你应该能够做这样的事情......

foreach (KeyValuePair<String, String> kvp in rowValues)
{
var rowValue = bookingRow[kvp.Key];
var passedValue = Convert.ChangeType(kvp.Value.Trim(), bookingRow[kvp.Key].GetType());
// or, if your bookingRow comes from a table
var passedValue = Convert.ChangeType(kvp.Value.Trim(), table.Columns[kvp.Key].DataType);
if (passedValue.Equals(rowValue) == false)
{
// code here
}
}

编辑:您将遇到一些问题。您需要使用 .Equals 方法(我更改了上面的代码),因为 ChangeType 返回一个对象;和 != 进行引用比较。这将处理 rowValue 为 0 且 passedValue 为 0 装箱为对象的情况。

但是,这不会解决您有 ""和 ""的情况。这两件事不一样,也不相等;而且,如果不检查它们是字符串的值,您将不知道。因此,我建议您编写一些函数来手动执行比较。

关于c# - DataRow 列和字符串值比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17558617/

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