如果字符串数组中的列名在字符串数组中具有匹配的值,则获取DataRow

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果字符串数组中的列名在字符串数组中具有匹配的值,则获取DataRow相关的知识,希望对你有一定的参考价值。

我正在尝试获取DataRow,如果在字符串数组中具有匹配的列名的列在另一个列表值中具有与某项匹配的值。我陷入了第三段代码的过滤条件。我感谢任何建议。

rule是一个看起来像这样的数据表:

rule

以下所有逻辑对rule的每一行运行。

dtResult也是一个看起来像这样的数据表:

dtResult

我正在尝试将updateTEST作为DataRow获得,其中colName中列出的那些列的值与grbByValue列表中的项目值相匹配。第三块代码与输入样本进行硬编码。但我正在尝试使用colNamegrbByValue的值使此代码动态化。

值列表:

string[] grpby = { "ageband","gender","code"};
List<string> grbByValue = new List<string>() { "85+", "1", "1010" };

列名数组:

string[] colName = {"RuleID", "GroupBy0", "GroupBy1", "GroupBy2" };

获取DataRow的代码:

DataTable distDtResult = dtResult.DefaultView.ToTable(true, colName);

var updateTEST = distDtResult.AsEnumerable()
                     where dr.Field<string>("RuleID") == rule["RuleID"].ToString() 
                     && r.Field<string>("GroupBy0") == "85+" 
                     && r.Field<string>("GroupBy1") == "1" 
                     && r.Field<string>("GroupBy2") == "1010";
答案

这可能是一个很好的起点,至少可以更好地提出问题并寻求答案。

string[] colName = { "RuleID", "GroupBy0", "GroupBy1", "GroupBy2" };

// "All the below logic is run for each row of rule"
// this goes through each row of the rule DataTable
foreach (DataRow rule in ruleTable.Rows)
{
    // This is going to be equivalent to the grpby variable you specified
    var groupRules = rule.Field<string>("GroupBy").ToString().Split("|");

    // Some sort of mapping may need to go here to go from "ageband" to "GroupBy0", "gender" to "GroupBy1", etc.

    foreach(DataRow row in dtResult.Rows)
    {
        DataTable distDtResult = dtResult.DefaultView.ToTable(true, colName);

        var updateTEST = from dr in distDtResult.AsEnumerable()
                         where dr.Field<string>("RuleID") == rule["RuleID"].ToString()
                         && dr.Field<string>("GroupBy0") == row["GroupBy0"].ToString() // ageband
                         && dr.Field<string>("GroupBy1") == row["GroupBy1"].ToString() // gender
                         && dr.Field<string>("GroupBy2") == row["GroupBy2"].ToString() // code
                         // more
                         select dr;
    }
}

以上是关于如果字符串数组中的列名在字符串数组中具有匹配的值,则获取DataRow的主要内容,如果未能解决你的问题,请参考以下文章

在猫鼬中匹配具有字符串值的数组?

将数组的值与字符串 PHP 匹配

R将数据帧中的字符串匹配替换为来自另一个数据帧/数组的值

判断字符串中是不是包含某个字符串

尝试匹配两个数组中的值,如果存在匹配值,则输出 true

PHP如何检查一个数组内是不是存在指定元素