Я пытаюсь разработать пользовательские атрибуты общего назначения ValidationAttributes. Тот факт, что невозможно создать общий подкласс атрибута, сводит меня с ума.
Вот мой код для переопределения IsValid в атрибуте ValidationAttribute для проверки уникальности значения свойства:
public override bool IsValid(object value)
{
SomeDataContext context = SomeDataContext.GetNewDataContext();
Type tableType = typeof(Table<>).MakeGenericType(new Type[] { _EntityType });
var table = Activator.CreateInstance(tableType);
//ITable table = context.GetTable(_EntityType);
var codeProp = (from member in context.Mapping.GetMetaType(_EntityType).DataMembers
where member.Name == _PropertyName
select member.Member).Single();
ParameterExpression param = Expression.Parameter(_EntityType, "x");
MemberExpression memberExp = Expression.Property(param, (PropertyInfo)codeProp);
Expression body = Expression.Equal(memberExp, Expression.Constant(value, typeof(char)));
//var predicate = Expression.Lambda<Func<TEntityType, bool>>(body, param);
Type lambdaType = typeof(Func<,>).MakeGenericType(_EntityType, typeof(bool));
var predicate = Expression.Lambda(lambdaType, body, param);
object code = table.FirstOrDefault(predicate);
if (code != null)
{
return false;
}
return true;
}
Эта строка:
код объекта = table.FirstOrDefault (предикат);
ошибок:
'объект' не содержит определения для 'FirstOrDefault' и не имеет расширения ...... и т. Д.
Как определить, привести или иным образом заставить компилятор распознавать «таблицу» как нечто, открывающее метод .FirstOrDefault?
Спасибо