Я написал запрос linq, чтобы получить данные и сохранить их в IQueryable<object>
. После этого я хочу выполнить выражение Linq, чтобы удалить некоторые нулевые данные.
IQueryable<object> employees;
select new
{
temp.EMP_NO,
personal.EMP_NAME,
hptrx.TRX_CD,
trx.TRX_DESC,
CURRENT_MONTH = hptrx.AMOUNT,
PREVIOUS_MONTH = db.HPTRXes.Where(x => x.COMP_CD == temp.COMP_CD && x.EMP_NO == temp.EMP_NO &&
x.TRX_CD == hptrx.TRX_CD && x.P_MTH == previousMonth && x.P_YEAR ==
previousYear && x.P_PERIOD == record.P_PERIOD).Select(x => x.AMOUNT).FirstOrDefault()
});
Ниже будет выполнен код для фильтрации PREVIOUS_MONTH содержит нулевое значение.
var propertyPreviousMonth = "PREVIOUS_MONTH";
var sourceType = typeof(object);
var underlyingType = employees.First().GetType();
var propertyType = underlyingType.GetProperty(propertyPreviousMonth).PropertyType;
var param = Expression.Parameter(sourceType);
var left = Expression.Property(
Expression.Convert(param, underlyingType), propertyPreviousMonth
);
Expression right = Expression.Constant(null);
Expression e1 = Expression.NotEqual(left, right);
var lambda = Expression.Lambda(e1, param);
var expr = Expression.Call(typeof(Queryable), "Where", new Type[] { sourceType },
employees.Expression, lambda
);
employees = employees.Provider.CreateQuery<object>(expr);
Однако я получаю ошибка ниже при вызове employees.Count()
Невозможно привести тип «System.Object» к типу «Анонимный тип». LINQ to Entities поддерживает только приведение типов примитивов и перечислений EDM.