Próbuję przekonwertować FFG :,Dynamiczny obiekt nie pokazując swoje metody
Działa
IResultSEt rs = db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames).FROM(data.ToString()).Execute();
do tego, co nie działa,
dynamic rs = db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames);
rs = rs.FROM(data.ToString());
rs = rs.Execute();
Daje mi błąd, że nie może znaleźć "COLUMNS".
podczas debugowania, wydaje się, że rs jest podniesienie wszystkich metod zwróci i zmienne prywatne w SELECT klasy po prostu nie podnosząc sposób jak kolumny w SELECT klasy w czasie wykonywania. To jest bardzo dziwne, spodziewałem się, że to także zabierze metody, robię coś złego ???
UPDATE
definicja db w db .SELECT.COLUMNS (db.GetTable (data.ToString()) ColumnNames.); jest
public class Database
{
private Dictionary<string, ITable> _tables = new Dictionary<string, ITable>();
public ITable AddTable(string tableName, string[]columnNames, Type[] columnTypes)
{
ITable tbl = new Table(tableName);
tbl.SetColumns(columnNames, columnTypes);
_tables.Add(tableName.ToUpper(), tbl);
return tbl;
}
public ITable GetTable(string tableName)
{
return _tables[tableName.ToUpper()];
}
public ISELECT SELECT
{
get
{
ISELECT select = new SELECT(this);
return select;
}
}
public Dictionary<string,ITable> getTables()
{
return _tables;
}
}
definicja SELECT w dB. SELECT .KOLUMNS (db.GetTable (data.ToString()). ColumnNames); który jest interfejsem do mojej klasy SELECT;
public interface ISELECT
{
ISELECT TOP(Int32 N);
ISELECT DISTINCT { get; }
ISELECTCOLUMN COLUMN(string columnName);
ISELECTTABLECOLUMN COLUMN(string tableName, string columnName);
ISELECTCOLUMNS COLUMNS(params string[] columnNames);
ISELECTSUMCOLUMN SUM(string columnName);
ISELECTSUMCOLUMN SUM(string tableName, string columnName);
}
To gdzie leży problem, dynamiczny obiekt nie jest podniesienie metody w interfejsie, to podnosi wszystkie zmienne prywatne i jedyna metoda to podnosi to „odrębne”.
Poniżej znajduje się część definicji klasy SELECT, jest w niej dużo kodu, więc po prostu dodam trochę;
internal class SELECT : ISELECT, ISELECTInternals
{
private Database _dw;
private bool _DISTINCT;
private Int32 _TOPN = -1;
private List<Int32> _JOINNumbers = new List<Int32>();
private string[] _selectJOINLHScolumnTableNames;
private string[] _selectJOINLHScolumnNames;
private string[] _selectJOINRHScolumnTableNames;
private string[] _selectJOINRHScolumnNames;
private string[] _selectcolumnTableNames;
private string[] _selectcolumnNames;
private string[] _selectcolumnAliases;
private object[] _selectcolumnLiterals;
private string[] _selectcolumnStringTemplates;
private AggregateTypes[] _selectcolumnAggregates;
private string[] _queryTableNames;
private string _SUMcolumnName;
private string _FROMTableName;
private List<string> _INNERJOINTableNames = new List<string>();
private List<string> _JOINTableNames = new List<string>();
private List<JoinTypes> _TableJoinTypes = new List<JoinTypes>();
private bool _takeANDFlag = true;
private List<string> _filterColumnTableNames = new List<string>();
private List<string> _filterColumnNames = new List<string>();
private List<object[]> _filterColumnValues = new List<object[]>();
private List<string> _GROUPBYcolumnTableNames = new List<string>();
private List<string> _GROUPBYcolumnNames = new List<string>();
itp
Trudno jest pomóc, gdy nie wiemy nic o implementacji. Czy mógłbyś podać więcej informacji, lub najlepiej krótki, ale kompletny przykład? Czy używasz jawnej implementacji interfejsu w dowolnym miejscu? –
@Jon Edytowałem mój post, jeśli potrzebujesz więcej informacji daj mi znać, nie chcesz wkleić dużo kodu, może stać się nieczytelne. – Dreamer78692
Potrzebujesz więcej informacji na temat awarii. Co definiujesz interfejs ISELECTCOLUMNS? – Hagashen