[英]C# DataTable.Select With multiple conditions on a Single Column
我有一个DataTable,我想一次查询一列以检查它是否符合设置的标准,由于某种原因,下面的代码在第一列之后给出的结果不正确,因此给出了正确的结果。
private bool BusinessRulesOne(DataTable dt, DataColumn dc)
{
bool isSatisfied = false;
DataRow[] checkColumn = dt.Select(dc.ColumnName + " " + "in (1,2,3,)");
if (checkColumn.Length != 0)
{
isSatisfied = true;
}
return isSatisfied;
}
在此方法上,我传递了我正在查询的DataTable和当前正在关注的DataColumn。 这里需要发生的是,我要检查此列上的值是否由值1,2和3组成。如果是,则返回true。
private bool BusinessRulesTwo(DataTable dt, DataColumn dc)
{
bool isSatisfied = false;
var checkColumn = dt.Select(dc.ColumnName + " " + " = 1");
if (checkColumn.Count() > 3)
{
isSatisfied = true;
}
return isSatisfied;
}
根据另一条规则,我正在检查该列中一个(1)的数目是否大于三(3),如果是,则返回true。
任何建议都值得欢迎,我对Linq并不陌生,但愿意学习和探索它,如果它使生活更轻松。
首先,您应该知道数据表未实现IEnumerable,因此在此处使用Linq时应使用AsEnumerable:对于第一条规则:
private bool BusinessRulesOne(DataTable dt, DataColumn dc) { return dt.AsEnumerable().Any(dataRow => !String.IsNullOrEmpty(dataRow.Field<string>(dc.ColumnName).First().ToString()) && ( dataRow.Field<int>(dc.ColumnName) == 1 || dataRow.Field<int>(dc.ColumnName) == 2 || dataRow.Field<int>(dc.ColumnName) == 3));}
对于第二条规则:
private bool BusinessRulesTwo(DataTable dt, DataColumn dc) { return dt.AsEnumerable().Where(dataRow => !String.IsNullOrEmpty(dataRow.Field<string>(dc.ColumnName).First().ToString()) && ( dataRow.Field<int>(dc.ColumnName) == 1)).Count() > 3 ;}
“如果此列上的值由值1,2和3组成,则返回true”
BusinessRulesOne
没有正确表达此条件。 它的工作方式有所不同:“如果列中至少包含一组值,则返回true”。 它不能保证没有其他值。
这是经过修改的具有反向逻辑的方法:“如果此列包含除1,2或3以外的其他内容,则返回false”
private bool BusinessRulesOne(DataTable dt, DataColumn dc)
{
DataRow[] checkColumn = dt.Select(dc.ColumnName + " not in (1,2,3)");
return checkColumn.Length == 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.