참고로 : Creating a ValidationAttribute to ensure unique column values.
ValidationAttribute 돌아 오는
좋아요 ...의 질문 프레이밍 해보자 : 그것은 DataContext에 확장 메서드가있어
static TEntity Get<TEntity, TKey>(this DataContext ctx, TKey key) where TEntity : class
{
var table = ctx.GetTable<TEntity>();
var pkProp = (from member in ctx.Mapping.GetMetaType(typeof(TEntity)).DataMembers
where member.IsPrimaryKey
select member.Member).Single();
ParameterExpression param = Expression.Parameter(typeof(TEntity), "x");
MemberExpression memberExp;
switch (pkProp.MemberType)
{
case MemberTypes.Field: memberExp = Expression.Field(param, (FieldInfo)pkProp); break;
case MemberTypes.Property: memberExp = Expression.Property(param, (PropertyInfo)pkProp); break;
default: throw new NotSupportedException("Invalid primary key member: " + pkProp.Name);
}
Expression body = Expression.Equal(
memberExp, Expression.Constant(key, typeof(TKey)));
var predicate = Expression.Lambda<Func<TEntity, bool>>(body, param);
return table.Single(predicate);
}
: 나는이 코드를 찢어 here에서
을 필요한 물건.
이public override bool IsValid(object value)
SomeDataContext context = SomeDataContext.GetNewDataContext();
var 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)));
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;
}
이 줄은 나쁜 :
나는이 점에 코드를 해킹했다 .... 속성은 일반적인 subcalsses을 허용하지 않기 때문에 - 그러나, 그것은 일반적인 PARMS을 필요로 내가 사용할 수 없습니다 :
object code = table.FirstOrDefault(predicate);
나는 도움이되지 않을 수 here 답변을 언급한다.
var enumerator = ((IEnumerable)table).GetEnumerator();object code = enumerator.MoveNext() ? enumerator.Value : null;
는 식 트리를 구축하는 나의 시도에서 유용하지 않습니다. 내가하려고 할 때IEnumerable<object> tableGeneric = ((IEnumerable)table).OfType<object>();
는 문제가 있습니다 :
object code = tableGeneric.FirstOrDefault(predicate);
그래서, 나는 꽤 붙어입니다. 거기에 어떤 아이디어가 있니?
감사합니다.