我有以下代码:
DataTable dt = (DataTable)Session["Records"];
DataTable SelectedRows = null;
if (somecondition) {
if (dt.Select("HoursWorked <> ContractHours").Length > 0)
{
SelectedRows = dt.Select("HoursWorked <> ContractHours").CopyToDataTable();
}
}
问题:当前的代码不会选择"hoursworkked"是零。
要求:如何设置像ISNULL(HoursWorked, 0)的行,其中ContractHours>0(最好没有foreach)?
您完全可以使用Function ISNULL来构建表达式。见上。表达文档:
所以如果我明白你的要求,你应该写:
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为-1,因为我认为零是一个合法的值
小时工作您可以要求is not null
像var selected = table.Select("HoursWorked is not null AND HoursWorked <> ContractHours");