我有IEnumerable对象,我在for循环中多次过滤,如下所示:
IEnumerable<XElement> searchedTypes;
//searchedTypes then loaded with data
for (int counter = 0; counter < 5; counter++)
{
string index = (counter+1).ToString();
searchedTypes = searchedTypes.Where(x => Regex.IsMatch("String"+index, x.Attribute("Attribute"+index).Value)
&& Regex.IsMatch("String"+index, x.Attribute("AttributeN"+index).Value));
if (searchedTypes.Count() == 0)
break;
}
在第一次迭代结束时,我得到过滤序列(searchingTypes),但是当下一次迭代开始时,序列变为空。如果我遗漏了任何东西,请告诉我。
答案 0 :(得分:0)
我没有看到你的数据源,所以我只能假设错误在哪里。请尝试以下方法:
IEnumerable<XElement> filter(IEnumerable<XElement> source)
{
for (int counter = 0; counter < 5; counter++)
{
string index = (counter + 1).ToString();
foreach (var n in source.Where(x =>
{
var attr1 = x.Attribute("Attribute" + index);
var attr2 = x.Attribute("AttributeN" + index);
if (attr1 == null || attr2 == null)
return false;
return Regex.IsMatch("String" + index, attr1.Value)
&& Regex.IsMatch("String" + index, attr2.Value);
}))
{
yield return n;
}
};
}
使用:
var result = filter(searchedTypes);