一般的なカスタムカスタムValidationAttributesを開発しようとしています。属性の一般的なサブクラスを作成できないという事実は、私をナットにしています。ジェネリックが利用できない場合にジェネリックを取得しようとしています
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;
}
この行:ここ
は、プロパティの値が一意であることを確認するValidationAttributeにIsValidのオーバーライドのための私のコードである
オブジェクトコード= table.FirstOrDefault(述語)。
エラーアウト:
は「オブジェクト」が「FirstOrDefault」と拡張子なし......などの定義が含まれていません。
"テーブル"を.FirstOrDefaultメソッドを公開するものとして認識するようにコンパイラを定義、キャスト、または取得する方法を教えてください。
おかげ
私は式ツリーlinq2sqlを構築するために使用されます作成していて、これは私を助けないと思いますSQLステートメント – theBruce