类型转换在where子句LinQ C#中将字符串的一部分转换为int

时间:2010-07-15 07:56:37

标签: c# linq lambda

我有一个字符串名称的集合,很少有名字以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)”整数,显然名称是错误的。那么有没有最好的方法来检查并返回一个字符串集合

3 个答案:

答案 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的值。