C# 动态对象不显示其方法

C# 动态对象不显示其方法,c#,winforms,dynamic,C#,Winforms,Dynamic,我正在尝试转换ffg: 这很有效 IResultSEt rs = db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames).FROM(data.ToString()).Execute(); 这是行不通的 dynamic rs = db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames); rs = rs.FROM(data.ToString()

我正在尝试转换ffg:

这很有效

IResultSEt rs =    db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames).FROM(data.ToString()).Execute();
这是行不通的

dynamic rs = db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames);
           rs = rs.FROM(data.ToString());
           rs = rs.Execute();
它给了我一个找不到“列”的错误

在调试过程中,rs似乎正在选择SELECT类中的所有返回方法私有变量,只是在运行时没有选择SELECT类中类似方法的列。这是非常奇怪的,我期望它也拿起方法,我做错了什么

更新

db中的db的定义。SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames);是

这就是问题所在,动态对象没有拾取接口中的方法,它拾取所有私有变量,它拾取的唯一方法是“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>();
内部类选择:ISELECT,ISELECTInternals
{
私有数据库;
私人住宅区;
私有Int32_TOPN=-1;
私有列表_JOINNumbers=新列表();
私有字符串[]\u选择JoinlHSColumnTableNames;
私有字符串[]\u选择JoinlHSColumnNames;
私有字符串[]\u选择JoinRhsColumnTableNames;
私有字符串[]\u选择JoinRhsColumnNames;
私有字符串[]\u选择ColumnTableNames;
私有字符串[]\u选择ColumnNames;
私有字符串[]\u选择ColumnAlias;
私有对象[]\u选择ColumnLiterals;
私有字符串[]\u选择ColumnStringTemplates;
private AggregateTypes[]\u选择Column Aggregates;
私有字符串[]\u查询表名;
私有字符串_SUMcolumnName;
私有字符串_FROMTableName;
私有列表_INNERJOINTableNames=新列表();
私有列表_JOINTableNames=新列表();
私有列表_TableJoinTypes=新列表();
private bool_takeANDFlag=true;
私有列表_filterColumnTableNames=新列表();
私有列表_filterColumnNames=新列表();
私有列表_filterColumnValues=新列表();
私有列表_GROUPBYcolumnTableNames=新列表();
私有列表_GROUPBYcolumnNames=新列表();

等。

必须更改其他内容。更改捕获特定表达式的位置或位置不会导致它在存储值/引用之前引发异常

也许使用语句或其他类型已经发生了变化,而您没有意识到这一行之间的成功

IResultSEt rs =    db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames)
dynamic rs = db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames);
以及生产线的故障

IResultSEt rs =    db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames)
dynamic rs = db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames);
但是在db上找不到方法意味着db的类型已经改变,或者导入扩展方法的用法已经改变

让我重申一下。在整个右侧完成求值之前,存储的左侧对右侧的求值方式没有影响。(不考虑左侧说
Expression
vs.
Func


我认为,自从您将问题或问题中发布的源代码中没有说明的问题放在一起后,情况发生了很大变化。

当我们对实现一无所知时,很难提供帮助。您能否提供更多信息,或者理想情况下提供一个简短但完整的示例?您是否在任何地方使用显式接口实现@Jon我已经编辑了我的帖子,如果您需要更多信息,请告诉我,不想粘贴大量代码,可能会变得不可读。需要更多关于失败原因的详细信息。您是如何定义SelectColumns接口的?您确定要用dynamic而不是var吗?如果您使用dynamic,则必须强制转换,以便按照compi的定义访问方法直到运行时,ler才知道这些方法是什么。