From 这个问题 https://stackoverflow.com/questions/5067120/expression-trees-and-nullable-types我5分钟前问过,很明显下面的代码抛出了一个异常,指出
未处理的异常:
System.InvalidOperationException:
二元运算符 Equal 未定义
对于类型
'System.Nullable`1[System.Int32]' 和
'系统.Int32'。
Code
public static void GetResultCollection<T>() {
AccrualTrackingEntities db = new AccrualTrackingEntities();
var result = db.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name + "s"));
int? ItemTypeValue = 1;
var param = Expression.Parameter(typeof(T));
var lambda = Expression.Lambda<Func<T, bool>>(
Expression.Equal(
Expression.Property(param, "ProcInstId"),
Expression.Constant(ItemTypeValue)),
param);
var list = result.Where(lambda).ToList();
}
但是,此代码的类型明确列出在Expression.Constant
确实有效
class Program {
public static void GetResultCollection<T>() {
AccrualTrackingEntities db = new AccrualTrackingEntities();
var result = db.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name + "s"));
int? ItemTypeValue = 1;
var param = Expression.Parameter(typeof(T));
var lambda = Expression.Lambda<Func<T, bool>>(
Expression.Equal(
Expression.Property(param, "ProcInstId"),
Expression.Constant(ItemTypeValue, typeof(int?))),
param);
var list = result.Where(lambda).ToList();
}
问题是,why is Expression.Constant
无法隐式转换int?
to ... int?