public static void Main()
Console.WriteLine("Hello World");
db.GetEq<TableA>(0,11111);
db.GetEq<TableA>(1,11111,22222);
db.GetEq<TableA>(2,11111,"Memo");
db2.GetEq<TableA>(0,11111);
db2.GetEq<TableA>(1,11111,22222);
db2.GetEq<TableA>(2,11111,22222,33333);
public string Name {get;set;}
public abstract class CommonDB
protected abstract object GetQueryParam(int index , params object[] values);
public T GetEq<T>(int queryIndex , params object[] values) where T:class
var paramObject = GetQueryParam(queryIndex , values);
Console.WriteLine(paramObject);
return (Activator.CreateInstance(typeof(T))) as T;
public class DB1 : CommonDB
protected override object GetQueryParam(int index , params object[] values)
return new {Mitsumori = values[0]};
return new {Mitsumori = values[0] , Hanbai = values[1]};
return new {Mitsumori = values[0] , Memo = values[1]};
throw new Exception("exception");
public class DB2 : CommonDB
protected override object GetQueryParam(int index , params object[] values)
return new {Mitsumori2 = values[0]};
return new {Mitsumori2 = values[0] , Hanbai2 = values[1]};
if(values.Length != 3) throw new Exception("invalid param");
return new {Mitsumori2 = values[0] , Hanbai2 = values[1] , Kouzi2 = values[2]};
throw new Exception("exception");