DataTable 为空值数据设置一个值
DataTable set a value for null valued data
我有以下代码。
DataTable dt = (DataTable)Session["Records"];
DataTable SelectedRows = null;
if (somecondition) {
if (dt.Select("HoursWorked <> ContractHours").Length > 0)
{
SelectedRows = dt.Select("HoursWorked <> ContractHours").CopyToDataTable();
}
}
问题:当前代码不选取“HoursWorked”为空的行。
要求:如何为 ContractHours > 0(最好没有 foreach)的行设置类似 ISNULL(HoursWorked, 0) 的内容?
你可以要求 is not null
比如 var selected = table.Select("HoursWorked is not null AND HoursWorked <> ContractHours");
您完全可以使用函数 ISNULL 来构建您的表达式。请参阅 DataColumn.Expression 文档:
所以如果我理解你的要求你应该写:
if (somecondition)
{
string expression = @"HoursWorked <> ContractHours OR (
ISNULL(HoursWorked, -1) = -1 AND ContractHours > 0)";
DataRow[] rows = dt.Select(expression);
if (rows.Length > 0)
{
SelectedRows = rows.CopyToDataTable();
}
}
请注意,我已经略微改进了您调用 Select 的代码一次,我还将 ISNULL 的 replacememt 值更改为 -1,因为我认为零是 HoursWorked[=12 的合法值=]
我有以下代码。
DataTable dt = (DataTable)Session["Records"];
DataTable SelectedRows = null;
if (somecondition) {
if (dt.Select("HoursWorked <> ContractHours").Length > 0)
{
SelectedRows = dt.Select("HoursWorked <> ContractHours").CopyToDataTable();
}
}
问题:当前代码不选取“HoursWorked”为空的行。
要求:如何为 ContractHours > 0(最好没有 foreach)的行设置类似 ISNULL(HoursWorked, 0) 的内容?
你可以要求 is not null
比如 var selected = table.Select("HoursWorked is not null AND HoursWorked <> ContractHours");
您完全可以使用函数 ISNULL 来构建您的表达式。请参阅 DataColumn.Expression 文档:
所以如果我理解你的要求你应该写:
if (somecondition)
{
string expression = @"HoursWorked <> ContractHours OR (
ISNULL(HoursWorked, -1) = -1 AND ContractHours > 0)";
DataRow[] rows = dt.Select(expression);
if (rows.Length > 0)
{
SelectedRows = rows.CopyToDataTable();
}
}
请注意,我已经略微改进了您调用 Select 的代码一次,我还将 ISNULL 的 replacememt 值更改为 -1,因为我认为零是 HoursWorked[=12 的合法值=]