2

私は次のサービス方法を持っていました-

public static DataTable GetBookDetails(BookEntities context)
    {
        DataTable dtBooks= new DataTable();
        dtBooks.TableName = "BookDetails";
        dtBooks.Columns.Add(new DataColumn("Name",typeof(string)));
        dtBooks.Columns.Add(new DataColumn("ISBN",typeof(string)));
        dtBooks.Columns.Add(new DataColumn("Price",typeof(int)));
        dtBooks.Columns.Add(new DataColumn("Author",typeof(string)));
        IQueryable<Book> query = from b in context.Books.Include("Authors")
                                                                      .Include("Details/Price")
                                                                      .Include("Activity")
                                     where b.Activity.IsActive
                                     select b;
        if (query != null)
        {
            var sorted = query.ToArray().OrderByDescending(b => b.Activity.DateCreated);
            foreach (Book bb in sorted)
            {
                DataRow row = dtBooks.NewRow();
                row["Name"] = bb.Name;
                row["ISBN"] = bb.ISBN;
                row["Price"] = bb.Details.Price.CostOfBook;
                row["Author"] = bb.Authors.Name;
                dtBooks.Rows.Add(row);
            }
        }
        else
            dtBooks= null;
        return dtBooks;
    }

私の質問は -

  1. これは詳細を取得するための効率的な方法ですか、それともこの方法を改善できますか?
  2. 誰かが、DataTable の代わりに IList を使用するように提案してくれました。これを使うべきですか?もしそうなら、どのような利点がありますか?
  3. DataTable を使用する際の何が問題になっていますか?
4

4 に答える 4

8

DataTableIList

IListインデックスでアクセスできるコレクションを表します。これ以上何もない。

DataTableにも同様の機能がありますが、より多くの機能 (より多くのイベントより多くの機能など) を提供し、高度な機能 (バインド、カスタム並べ替え、グループ化、行変更のイベント、セル追加など) で表形式データを表すなど、これらの機能が必要な場合に適しています。 )。これらの追加機能はすべて、追加のオーバーヘッド (より多くのメモリ要件) を伴います。

これは詳細を取得する効率的な方法ですか、それともこの方法を改善できますか?

を使用することで少し改善できますIList。改善はデータ アクセスの高速化ではなく、DataTable提供される追加機能を使用しないことです。インデックスによるアクセスが必要ない場合は、を使用してさらに改善できますIEnumerable
ジェネリック バージョンを使用することで、さらに改善できます。IList<T>、またはIEnumerable<T>ボックス化/ボックス化解除のオーバーヘッドを節約します。

誰かが、DataTable の代わりに IList を使用するように提案してくれました。これを使うべきですか?もしそうなら、どのような利点がありますか?

DataTableIList には、インデックスによるアクセス以外で提供される多くの機能のオーバーヘッドがありません。

DataTable を使用する際の何が問題になっていますか?

何も間違ってない。DataTable高度なデータ アクセス機能が必要な場合に適しています。

于 2013-01-09T05:13:56.203 に答える
0

データベースまたはデータベーステーブルをモデル化する場合は、クラスであるデータテーブルを使用することをお勧めします。IListはインターフェイスであり、データブルの機能はありません。

于 2013-01-09T05:39:57.843 に答える
0

通常、サービスを扱うときは一般的なものを維持しようとしますが、その側面から見ている場合は IList を使用します。ただし、@Tilak が述べたように、datatable はより多くの機能を提供します。

于 2016-10-03T07:52:00.153 に答える
0

これは詳細を取得するための効率的な方法ですか、それともこの方法を改善できますか?

静的メソッドを直接呼び出す代わりに、拡張メソッドを使用できます。見た目はすっきりしたと思います。

変数queryを null にすることはできません。

誰かが、DataTable の代わりに IList を使用するように提案してくれました。これを使うべきですか?もしそうなら、どのような利点がありますか?

IList<T>(または)とは異なり、DataTable の代わりに IList を使用する大きな利点はありませんIEnumerable<T>Tドメインオブジェクトの意味を持つ別のクラスBookです。

を使用IList<T>すると、タイプ T を厳密に制御でき、それぞれエラーが少なくなりますが、設計がより困難になります。

DataTable を使用する際の何が問題になっていますか?

メソッドの呼び出し元は、 の具体的な構造について何も知らないことを理解する必要がありRowsますDataTable

于 2013-01-09T07:37:05.223 に答える