动态where子句与循环linq c#

时间:2014-05-31 11:48:47

标签: c# regex linq

我有正则表达式和数据表的字典。

var data = ds.Tables["mytable"].AsEnumerable();

var regexlist = new Dictionary<string, Regex>
{
     {"PI1", new Regex(@"(-.[^I](-P[^IS]))|(-[^P].(-P[^IS]))")},
     {"SM1", new Regex("(-.[^I](-P[^IS]))|(-[^P].(-P[^IS]))")}
};

现在我想选择与列表中的正则表达式不匹配的数据表的所有行以及字典的键(错误代码)。

到目前为止,我有这个:

var query = data.Select(dr => dr.Field<string>("F1"));
query = regexlist.Aggregate(query, (current, regex1) => current.Where(u => regex1.Value.IsMatch(u) ));

但我认为只有第一个正则表达式被添加为where子句。 我不知道如何输出“错误代码”

我希望我能清楚地解释我的问题。

纳斯

1 个答案:

答案 0 :(得分:0)

除了那些不反映你的目标的表达式外,你需要反转test子句以获得与正则表达式不匹配的数据

current.Where(u => regex1.Value.IsMatch(u) == false)