4

からのデータのカスタム フィルタリングに使用されるラムダ式に問題があります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. 私はこの方法を理解するのに苦労しています。コンテキスト外の他の人にとって理解できるかどうかはよくわかりませんが、質問を投稿します-最初に、これは正確には何ですか-つまり、私が学ぶ/読む必要があるもの私が投稿したようなコードと2番目のコードを使用できるようにします。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

4

1 に答える 1

2

これを使用してください...私が正しければ、値を long 型に変換する必要がありますか?

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;
}
于 2013-02-26T14:27:42.647 に答える