我試圖建立一個CallExpression
喜歡的Equals創建CallExpression:LINQ表達式 - >使用枚舉類型
f.Equals(s);
其中,f
和t
是enum SType
。
所以,
var equalsMethod = typeof(SType).GetMethod("Equals", new[] { typeof(SType) });
ConstantExpression constantExpression = Expression.Constant(value, typeof(SType));
var newBody = Expression.Call(expr.Body, equalsMethod, constantExpression);
return Expression.Lambda<Func<TEntity, bool>>(newBody, expr.Parameters);
我不知道,但equalsMethod
是Boolean Equals(System.Object)
而不是Boolean Equals(SType)
。
所以,當我想建立CallExpression
淨告訴我,我不能使用SType
類型的表達式的方法Boolean Equals(System.Object)
的System.Object
類型的參數。
怎麼了?
注意'Expression.Equal '是調用'operator =='而不是'Equals'。如果表達式被編譯,它們不能保證是等價的,但強烈鼓勵它。如果表達式在EntityFramework/LinqToSql查詢中使用,則它們的翻譯方式相同。 – Johnbot