我有一个包含20个项目的字符串列表,如下所示
List<string> votingcodes = new List<string> { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"};
我正在使用正则表达式模式从另一个数据表(如下面的
)获取数据视图中的匹配数据for (int i = 0; i < 20; i++)
{
var r = new Regex("^.*\\b" + votingcodes[i] + "\\b.*$", RegexOptions.Compiled);
DataView dv = (from t in dtFetch.AsEnumerable()
where r.IsMatch(t.Field<string>("FMSG_IN").ToUpper())
select t).AsDataView();
}
获取数据后我更新了记录,但是我需要来自dtFetch数据表的非匹配数据。
我怎样才能做到这一点。
答案 0 :(得分:2)
如果您想在一个查询中同时获得两个结果,可以使用GroupBy
或ToLookup
。我认为你根本不需要循环:
List<string> votingcodes = new List<string> { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"};
var matchRegexes = votingcodes
.Select(c => new Regex("^.*\\b" + c + "\\b.*$", RegexOptions.Compiled));
var matchLookup = dtFetch.AsEnumerable()
.ToLookup(row => matchRegexes
.Any(r => r.IsMatch(row.Field<string>("FMSG_IN").ToUpper())));
var matchRows = matchLookup[true];
var noMatchRows = matchLookup[false];
DataView dvMatch = null;
DataView dvNoMatch = null;
if (matchRows.Any())
dvMatch = matchRows.CopyToDataTable().DefaultView;
if (noMatchRows.Any())
dvNoMatch = noMatchRows.CopyToDataTable().DefaultView;