lambda表达意义/修饰

时间:2013-02-26 14:20:16

标签: c# .net lambda

我遇到lambda表达式问题,该表达式用于自定义过滤来自DataGridView的数据。

这是表达式:

private static Expression<Func<T, bool>> ExpressionLongEquals<T>(string Key, long Value)
{
    var param = Expression.Parameter(typeof(T));
    // create expression for param => param.TEntityNameId == PrimaryKey
    var lambda = Expression.Lambda<Func<T, bool>>(
        Expression.Equal(
            Expression.Property(param, Key),
            Expression.Constant(Value)),
        param);
    return lambda;
}

问题在于我有一个Value参数类型为long?的情况,因为它似乎是可以接受的但是在完成此代码后我得到Method equal is not defined for Nullable1.System.Int64 and System.Int64的错误。我很难理解这种方法,不太确定它对于上下文之外的其他人是可以理解的,但是我会发布我的问题 - 首先,我究竟是什么,我的意思是什么 - 我需要学习/阅读的内容为了能够像我发布和第二个那样的代码。我很确定这个方法适用于long值,只有当long?作为参数传递时才会产生问题所以有没有办法修改它来解决这个问题呢?

long?值的需求是最近的,这是导致问题的原因我通常会这样做:

else if (property.PropertyType == typeof(long?))
{
    long value = Convert.ToInt64(rule.Data);
    selector = ExpressionLongEquals<T>(rule.Field, value);
}

但我仍然收到有关equal not defined for Nullable1.System.Int64 and System.Int64的错误。

1 个答案:

答案 0 :(得分:2)

使用此...如果我是正确的,您必须将您的值转换为长型?

private static Expression<Func<T, bool>> ExpressionLongEquals<T>(string Key, long Value)
{
    var param = Expression.Parameter(typeof(T));
    // create expression for param => param.TEntityNameId == PrimaryKey
    var lambda = Expression.Lambda<Func<T, bool>>(
        Expression.Equal(
            Expression.Property(param, Key),
            Expression.Constant(Value, typeof(long?)),
        param);
    return lambda;
}