5

私は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;
    }
}

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

ここに問題があります。動的オブジェクトはインターフェイス内のメソッドを取得せず、すべてのプライベート変数を取得し、取得する唯一のメソッドは"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>();

4

1 に答える 1

1

他の何かが変わったに違いありません。特定の式がキャプチャされる場所またはキャプチャされるかどうかを変更しても、値/参照を格納する前に例外がスローされることはありません。

おそらく、ステートメントまたは他のタイプの使用が変更され、行の成功の間にそれを認識していませんでした

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

と回線の障害

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

ただし、dbでメソッドを見つけられないということは、dbのタイプが変更されたか、拡張メソッドをインポートするための使用法が変更されたことを意味します。

言い換えてみましょう。ストレージの左側は、右側全体の評価が完了するまで、右側の評価方法に影響を与えません。(左側のことわざExpression<Func<>>vsを考慮していませんFunc<>

質問や質問に投稿されたソースコードで説明されていない質問をまとめてから、さらに変化があったと思います。

于 2013-01-09T15:12:48.860 に答える