【问题标题】:Type Casting Part of a string to int in where clause LinQ C#在 where 子句 LinQ C# 中将字符串的一部分类型转换为 int
【发布时间】:2010-07-15 07:56:37
【问题描述】:

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

【问题讨论】:

    标签: c# linq lambda


    【解决方案1】:

    要查找所有包含整数的字符串,您可以使用

    var columns = from c in factory.GetColumnNames("eventNames") 
                  where Regex.IsMatch(c, @"\d+")
                  select c; 
    

    【讨论】:

    • var columns = from c in factory.GetColumnNames("eventNames") where !Regex.IsMatch(c, @"\d+") select c;谢谢你的代码做了魔法。 :-)。我的预期结果是不在“名称”结果中包含那些具有整数值的名称。
    【解决方案2】:

    试试这个来选择所有像“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); 
    

    如果这些都不是你想要的,请澄清。

    【讨论】:

      【解决方案3】:

      尝试类似:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多