我有一个字符串名称的集合,很少有名字以X100,x200,x121开头,它们有数字值。 我正在使用LinQ循环thro并使用where子句来过滤那些具有整数值的名称,如x“100”。哪个是最好的方法来做到这一点? 是否可以在项目上使用Func或Action来检查每个字符串变量。我的
表达式中的where子句看起来像这样
var columns = from c in factory.GetColumnNames("eventNames")
where c.Substring(1) // I dont know what to do next
select c;
。如果下一个字符串是“c.substring(1)”整数,显然名称是错误的。那么有没有最好的方法来检查并返回一个字符串集合
答案 0 :(得分:1)
尝试此选择所有类似“x100”等的行。
int tmp;
var columns = from c in factory.GetColumnNames("eventNames")
where int.TryParse(c.Substring(1), out tmp)
select c;
尝试此选择所有行,将“x100”转换为“100”,其余部分保持不变。
int tmp;
var columns = from c in factory.GetColumnNames("eventNames")
select (int.TryParse(c.Substring(1), out tmp) ? tmp.ToString() : c);
如果这些都不是你想要的,请澄清。
答案 1 :(得分:1)
要查找包含整数的所有字符串,可以使用
var columns = from c in factory.GetColumnNames("eventNames")
where Regex.IsMatch(c, @"\d+")
select c;
答案 2 :(得分:1)
尝试类似:
var columns = from c in factory.GetColumnNames("eventNames")
where CharactersAfterFirstAreInteger(c)
select c;
private bool CharactersAfterFirstAreInteger(string stringToCheck)
{
var subString = stringToCheck.SubString(1);
int result = 0;
return int.TryParse(subString, out result);
}
如果需要,这使您可以灵活地更改CharactersAfterFirstAreInteger的签名,因此您可以执行其他检查,例如,只返回数值部分大于200的值。