如果字符串数组中的列名在字符串数组中具有匹配的值,则获取DataRow
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果字符串数组中的列名在字符串数组中具有匹配的值,则获取DataRow相关的知识,希望对你有一定的参考价值。
我正在尝试获取DataRow,如果在字符串数组中具有匹配的列名的列在另一个列表值中具有与某项匹配的值。我陷入了第三段代码的过滤条件。我感谢任何建议。
rule
是一个看起来像这样的数据表:
以下所有逻辑对rule
的每一行运行。
dtResult
也是一个看起来像这样的数据表:
我正在尝试将updateTEST
作为DataRow获得,其中colName
中列出的那些列的值与grbByValue
列表中的项目值相匹配。第三块代码与输入样本进行硬编码。但我正在尝试使用colName
和grbByValue
的值使此代码动态化。
值列表:
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的主要内容,如果未能解决你的问题,请参考以下文章