繁体   English   中英

C#DataTable.Select在单个列上具有多个条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM