Из этот вопрос , который я задал 5 минут назад, ясно, что следующий код вызывает исключение, заявляя, что
Необработанное исключение: System.InvalidOperationException: The бинарный оператор Equal не определен для типов 'System.Nullable`1 [System.Int32]' и 'System.Int32'.
Код
public static void GetResultCollection() {
AccrualTrackingEntities db = new AccrualTrackingEntities();
var result = db.CreateQuery(String.Format("[{0}]", typeof(T).Name + "s"));
int? ItemTypeValue = 1;
var param = Expression.Parameter(typeof(T));
var lambda = Expression.Lambda>(
Expression.Equal(
Expression.Property(param, "ProcInstId"),
Expression.Constant(ItemTypeValue)),
param);
var list = result.Where(lambda).ToList();
}
Однако этот код с типом, явно указанным в Expression.Constant
, действительно работает
class Program {
public static void GetResultCollection() {
AccrualTrackingEntities db = new AccrualTrackingEntities();
var result = db.CreateQuery(String.Format("[{0}]", typeof(T).Name + "s"));
int? ItemTypeValue = 1;
var param = Expression.Parameter(typeof(T));
var lambda = Expression.Lambda>(
Expression.Equal(
Expression.Property(param, "ProcInstId"),
Expression.Constant(ItemTypeValue, typeof(int?))),
param);
var list = result.Where(lambda).ToList();
}
Вопрос в том, почему является Expression.Constant
не может неявно преобразовать из int?
в ... int?