使用带有Queryable和表达式的int.TryParse

时间:2016-08-25 21:13:23

标签: c# .net linq lambda expression

我是c#中表达式的新手。

表达式代码

var parameter = Expression.Parameter(typeof(int), "param");
var constant = Expression.Constant(5, typeof(int));
var equal = Expression.Equal(parameter, constant);
var lambdaExpression = Expression.Lambda<Func<int, bool>>(equal, parameter);
var compiledExpression = lambdaExpression.Compile();

Query包含一个字符串值,我只想在值可转换为int

时应用expresion
int test;
query = query.Where(i => int.TryParse(i.Key, out test) && compiledExpression(test));

这将返回错误,指出不支持int.TryParse。 有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

你不能在那里使用参数。

1) var v = q.Where(x => x.All(c => c >= '0' && c <= '9'));
2) use regex instead of All
3) write a simple method that calls Int32.Parse and just returns a bool to hide the out param

代表#3:

    static bool SafeIntParse(string s)
    {
        int n;
        return Int32.TryParse(s, out n);
    }

    var v = q.Where(x => SafeIntParse(x));

SafeIntParse()方法当然是一个单独的静态方法。

编辑:

用于正则表达式方法:

        Regex regex = new Regex("^\\d+$", RegexOptions.Compiled);
        var v = q.Where(x => regex.Match(x).Success);

当然,将正则表达式对象作为类的静态对象。