1

カスタムクラスを使用したくありません。

var q = db.Query<dynamic>(query); //This does not work

クエリには、複数のテーブルからの結合とカスタム作成された列があります。

4

3 に答える 3

2

PetaPoco.cs の "ExecuteReader" メソッドをチェックして、次のようになっているかどうかを確認できます (以下のコードを参照)。

私のファイルには関数にコードが含まれていなかったため、スカラーメソッドの実行後にモデル化しました。これは、データグリッドに完全にバインド可能な汎用 DataTable を返します。ただし、データに変更を加えるには、結果の DataTable が読み取り専用であるため、独自の CRUD メソッドを実装する必要があることに注意してください。

    //Execute Reader
        public DataTable ExecuteReader(string sql, params object[] args)
        {
            try
            {
                OpenSharedConnection();
                try
                {
                    using (var cmd = CreateCommand(_sharedConnection, sql, args))
                    {
                        var val = cmd.ExecuteReader();
                        OnExecutedCommand(cmd);
                        var dt = new DataTable();
                        dt.Load(val);
                        return dt; //(T)Convert.ChangeType(val, typeof(T));
                    }
                }
                finally
                {
                    CloseSharedConnection();
                }
            }
            catch (Exception x)
            {
                OnException(x);
                throw;
            }
        }

        public DataTable ExecuteReader(Sql sql)
        {
            return ExecuteReader(sql.SQL, sql.Arguments);
        }
于 2012-10-01T15:30:38.460 に答える
0

グリッドに表示する 2 つのテーブルのフィールドを含むクラスを作成します。テーブルを結合して必要な列を返す SQL ステートメントをクエリに入力します。それで

var q=db.Query<YourClassName>.Query(query)

動作するはずです。

于 2012-09-05T21:03:51.060 に答える
0

データベース ビューを作成すると、T4 テンプレートがそのクラスを自動的に生成します。追加する必要があります

IncludeViews = true;

Database.tt へ

于 2012-10-29T05:45:34.817 に答える