C# 具有循环linq c的动态where子句

C# 具有循环linq c的动态where子句,c#,regex,linq,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 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) ));
但我认为只有第一个regex被添加为where子句。 我不知道如何输出错误代码

我希望我能把我的问题解释清楚


jonas

除了表达式不能反映您的目标之外,整个事情看起来都正常,您需要反转test子句以获取与正则表达式不匹配的数据

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