我遇到了用於自定義篩選來自DataGridView
的數據的lambda表達式的問題。lambda表達意義/修改
這是表達:
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
。
當函數簽名要求它只是「很長」時,'value'如何可以'長'? – Jon 2013-02-26 14:22:31
@Jon:房產是'長?'。 – SLaks 2013-02-26 14:25:48
請參閱編輯的代碼。正如我所說,我不完全明白,所以我不確定哪些部分對解決問題很重要。也許現在就足以指導我去解決一些我必須學習/閱讀的具體問題,以便更好地處理這個問題。 – Leron 2013-02-26 14:28:38