动态对象未显示其方法

Dre*_*692 5 c# dynamic winforms

我想转换ffg:,

这个作品

IResultSEt rs =    db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames).FROM(data.ToString()).Execute();
Run Code Online (Sandbox Code Playgroud)

进入这个,这是行不通的,

dynamic rs = db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames);
           rs = rs.FROM(data.ToString());
           rs = rs.Execute();
Run Code Online (Sandbox Code Playgroud)

它给我一个错误,它找不到"COLUMNS".

在调试时,似乎rs正在拾取SELECT类中的所有返回方法私有变量,它只是在运行时没有在SELECT类中获取类似COLUMNS的方法.这很奇怪,我预计它也会拿起方法,我做错了什么?

UPDATE

为定义分贝分贝 .SELECT.COLUMNS(db.GetTable(data.ToString())COLUMNNAMES); 是

 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

db中SELECT的定义.SELECT .COLUMNS(db.GetTable(data.ToString()).ColumnNames); 这是我的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);
}
Run Code Online (Sandbox Code Playgroud)

这就是问题所在,动态对象没有获取界面中的方法,它会获取所有私有变量,它唯一获取的方法是"DISTINCT".

下面是SELECT类定义的一部分,里面有很多代码,所以我会稍微说一下;

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>();
Run Code Online (Sandbox Code Playgroud)

等等

Mas*_*low 1

还有一些事情必须改变。更改捕获特定表达式的位置或是否捕获特定表达式不会导致它在存储值/引用之前引发异常。

也许 using 语句或其他类型已经改变,而你没有意识到成功之间的关系

IResultSEt rs =    db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames)
Run Code Online (Sandbox Code Playgroud)

以及线路故障

dynamic rs = db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames);
Run Code Online (Sandbox Code Playgroud)

但在数据库上找到方法失败意味着数据库的类型已更改或导入扩展方法的使用已更改。

让我尝试重述一下。存储的左侧对右侧的评估方式没有影响,直到整个右侧完成评估。(不考虑左侧的说法Expression<Func<>>Func<>

我认为自从您将问题放在一起以来,发生了更多变化,而问题或问题中发布的源代码中没有考虑到这些问题。