2011-02-09 12 views
0

私はADO.NETを使用していましたが、結合クエリを使用して作成されたTableAdapterを作成する際に使用しました。たとえば、製品テーブルアダプタには、 。LINQクエリとDaoレイヤはどのようにビューにクエリを返しますか?

LINQでは、これをどのように達成しますか? ProductsDaoクラスにLINQクエリを記述して、結合クエリの列を返しますか?グリッドビューにバインディングするために返すタイプは何ですか? LINQの結果を返す問題は、ProductsDaoクラスの整合性が損なわれると思っていたことです(これはdbからの製品行のみを返します)。

答えて

2

戻りたい結合データを表すクラス(たとえばProductDetails)を定義し、データレイヤーからIQueryable<ProductDetails>を返すことをお勧めします。

照会可能に戻すには、あなただけの単純なLINQクエリを記述することができます。

public IQueryable<ProductDetails> GetProducts() { 
    return from p in db.Products 
     join d in db.Details on p.ID equals d.ID 
     select new ProductDetails { p.Name, d.Notes }; 
} 

このアプローチにはいくつかの利点があります。

  • あなたが直接YourDataContext物体を露光していない - それは滞在することができますDAOクラスのプライベートフィールドとして(短命の場合)、必要に応じて作成することができます。

  • ユーザーはあなたがしているではない偶然ができ、あなたのデータベースと混乱(あなたが彼らにそれを行うための方法を提供しない限り)

  • ようにするには、(例えばProductまたはDetails)直接基礎となるLINQのエンティティを露出していませんクエリ可能を返します。これは単にクエリを表します。ユーザーが追加の制約(例:where)を追加すると、クエリが作成され、不要なデータは読み込まれません。

  • あなたはクラスからのみ合理機能を公開することができます - たとえば、あなたはGetProductscategoryID取るだけの方法を持っている場合、ユーザーは唯一それが不可能から表全体を取得することができた(特定のカテゴリの製品を取得することができますデータベース)

+0

大きなアドバイスありがとうございます。だから、私のProductDaoクラス内にこのメソッドを持たせるのは良い習慣ですか、それとも別のクラスのメソッドであるべきですか? – jaffa

関連する問題