2011-01-08 16 views
2

なぜ私たちはC#でLINQが必要なのでしょうか、ADO.netを使って何かできることがあれば。次に、LINQクエリの必要性は何ですか? ADO.netより十分に最適化されていますか?どちらを使うのが最適ですか?C#のLINQクエリ

+0

LinqはC#固有ではありません。 VB.NETもそれにうまくいきます。 – Oded

+0

言語機能やプロバイダ(Linq 2 SQL、Linq 2 XMLなど)について話しているかどうかを明確にすることはできますか? – Oded

+0

あなたの質問は「C#でデータベースクエリを書くときにLINQが必要なのはなぜですか?**」と私は思います... " –

答えて

1

Linq to Sql(これはあなたが指していると仮定している)は、便利な抽象化を提供するので便利です。

linqクエリを記述する方が、sqlを記述するよりもはるかに簡単で、オブジェクトを手動で水和することができます。

0

SQLにLINQは、明示的にToListメソッド()/てToArray()のような 何かをキャッシュする 必要性をもたらしながら。DataTableのはあなた はDB 往復せずに再列挙することができ、キャッシュを提供 DataContextのアイデンティティキャッシュを除いて、 L2Sコードは、DataReaderを に列挙することに近いです。 DataReaderは は再列挙できず、 は別のExecuteReaderを必要としますが、 L2Sクエリを再列挙することの影響は同じです--DBへの別のラウンドトリップです。

http://blogs.msdn.com/b/wriju/archive/2008/07/14/linq-to-sql-vs-ado-net-a-comparison.aspx

LINQ to SQL vs ADO.Net

2

あなたはLINQを必要とする理由私たちはあなたのを伝えることはできません。それはあなたが決定するためのものです。また、LINQとLINQとして認識しているものには違いがあります。 LINQはSQLのクエリのみを意味するわけではありません。 LINQは、クエリステートメントをメソッド呼び出しに翻訳するためにコンパイラに組み込まれています.LINQで使用できる多くのプロバイダがありますが、Linq-to-Sqlがそのうちの1つです(これがあなたが参照していると思います)。 Linq-to-Objects、Linq-to-Xmlなどです。

Linq-to-Sql(およびEF)はデータベースオブジェクトをデータベースドメインからアプリケーションドメインにマッピングするために使用されるORMフレームワークです。 ORMフレームワークは、自動データロード、プロパティマッピング、リレーションシップモデルなどを提供しながら、開発時間を大幅に短縮することができます。

これはすべてvanilla ADO.NETでも実行できますが、私の質問は、a)既存のコードベース、b)開発期限、c)保守性を考慮して、プロジェクトでORMフレームワークを使用することが可能かどうかです。

3

個人的に私はLinqの最大の強みは、開発者を最適化することだと思います。同じクエリ言語拡張を使用してさまざまなデータソースに対して開発者のクエリを自由にすることは、美しさです。

System.Web名前空間に含まれるクラスの数や、オタワにあるデータベースの顧客の数に事実上同じ構文を使用して回答できます。

もちろん、コストはかかりますが、最適化の意味は何ですか?

+0

答えは、LINQのパワーを最高に説明しています。 – Davita

1
  • コンポーザ:はあなたが複雑で脆弱なSQLの文字列の連結
  • タイプ安全に頼ることなく、異なるコードパスを使用して動的にクエリを作成することができます: SQLやEntity FrameworkのにLINQによって生成されたクラスは、強く型付けされていますコンパイル時に型チェックが強制されます。
  • オブジェクト指向の世界に滞在:オブジェクト指向の言語でプログラミングすると、なぜオブジェクト指向の方法でデータにアクセスできないのですか?ナビゲーションプロパティを使用すると、単一のクエリ(cust1.Orders)を作成せずに顧客のすべての注文を取得できます。
  • 可読性: LINQは、クエリー理解または拡張メソッドの構文を使用すると、SQLなどの不一致のDSLを既存の.NETコードに埋め込むことができます。
  • ラピッドアプリケーション開発(RAD):L2S/EFとLINQを使用すると、地面にぶつかることができます。データベースに接続されたアプリケーションをすぐに稼働させることができます。
  • 抽象化:単一のツール、LINQを使用して、あなたは各種のデータにアクセスし、さらには複数のドメインにまたがるクエリを作成することができます:各種データベース、オブジェクト、XML、34 more...
  • データベースの生成:あなたが思っている場合O/Rマッパーはデータベースをオブジェクトにマップするだけですが、あなたは間違っていると思います。 EFは、作成したクラスに基づいて自動的にデータベースを作成できます。これは合理的に良い出発点になることがあります。