gpt4 book ai didi

c# - 动态对象不显示其方法

转载 作者:太空狗 更新时间:2023-10-29 23:47:05 24 4
gpt4 key购买 nike

我正在尝试转换 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();

它给我一个找不到“COLUMNS”的错误。

调试时,rs 似乎正在获取SELECT 类它只是没有在运行时选择 SELECT 类中的 COLUMNS 之类的方法。这很奇怪,我希望它也能获取方法,我做错了什么???

更新

dbdb的定义.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;
}
}

SELECT 在 db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames) 中的定义;这是我的 SELECT 类的接口(interface);

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);
}

这就是问题所在,动态对象没有获取接口(interface)中的方法,它获取了所有私有(private)变量并且它获取的唯一方法是“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>();

等等

最佳答案

一定有其他事情发生了变化。更改捕获特定表达式的位置或是否捕获特定表达式不会导致它在存储值/引用之前抛出异常。

也许using语句或者其他类型发生了变化而你没有意识到这行之间的成功

IResultSEt rs =    db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames)

和线的失败

dynamic rs = db.SELECT.COLUMNS(db.GetTable(data.ToString()).ColumnNames);

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

让我试着重申一下。在整个右侧完成评估之前,存储的左侧对右侧的评估方式没有影响。 (不考虑左侧说 Expression<Func<>>Func<> )

我认为自从您将未在问题中说明的问题或问题中发布的源代码放在一起以来,发生了更多变化。

关于c# - 动态对象不显示其方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com