回答:
それらはすべてLINQ(Language Integrated Query)であるため、それらはすべて多くの共通点を共有しています。これらすべての「方言」は、基本的に、さまざまなソースからのクエリスタイルのデータ選択を可能にします。
Linq-to-SQLは、ORM-オブジェクトリレーショナルマッパーでのMicrosoftの最初の試みです。SQL Serverのみをサポートします。SQL Serverデータベーステーブルを.NETオブジェクトにマップするためのマッピングテクノロジーです。
Linq-to-Entitiesは同じアイデアですが、バックグラウンドでEntity FrameworkをORMとして使用しています。これもMicrosoftによるものですが、複数のデータベースバックエンドをサポートしています。
Linq-to-DataSetsはLINQですが、「古いスタイル」のADO.NET 2.0 DataSetsを使用しています-ORMがMicrosoftから登場する以前は、ADO.NETでできることはすべて、DataSets、DataTablesなどを返していました。 -to-DataSetsは、これらのデータストアにデータを照会します。したがって、この場合、データベースバックエンドからDataTableまたはDataSets(System.Data名前空間)を返し、次にLINQ構文を使用してそれらをクエリします。
LINQは、たとえば次のようなクエリ理解構文に基づいた幅広いテクノロジーセットです。
var qry = from x in source.Foo
where x.SomeProp == "abc"
select x.Bar;
コンパイラによってコードにマッピングされます。
var qry = source.Foo.Where(x => x.SomeProp == "abc").Select(x => x.Bar);
ここから本当の魔法が始まります。ここでは何も言っていないことに注意してFoo
ください-そしてコンパイラは気にしません!それがラムダをとることができるいくつかの適切なメソッドを解決Where
でき、その結果がラムダを受け入れることができるいくつかの Select
メソッドを持っている限り、それは幸せです。
今ラムダをコンパイルすることができると考えるのいずれか、(LINQツーオブジェクトLINQツーデータセットを含む、の委譲)匿名メソッドにまたはオブジェクトモデルでラムダを表す式ツリー(ランタイムモデルに)。
インメモリデータ(通常はIEnumerable<T>
)の場合は、デリゲートを実行するだけです。しかしIQueryable<T>
、式(a LambdaExpression<...>
)のオブジェクト表現では、それを引き離して、「LINQ-to-Something」の例に適用できます。
データベース(LINQ-to-SQL、LINQ-to-Entities)の場合、これはTSQLを記述することを意味します。次に例を示します。
SELECT x.Bar
FROM [SomeTable] x
WHERE x.SomeProp = @p1
ただし、(たとえばADO.NETデータサービスの場合)HTTPクエリを作成することを意味します。
少量のデータを返す適切に記述されたTSQLクエリを実行する方が、データベース全体をネットワーク経由でロードしてからクライアントでフィルタリングするよりも高速です。ただし、どちらにも理想的なシナリオと間違ったシナリオがあります。
ここでの目標と利点は、静的にチェックされた単一の構文を使用して広範囲のデータソースにクエリを実行できるようにすることと、コードをより表現力のあるものにすることです(たとえば、データをグループ化する「従来の」コードではありません)。それが何をしようとしているのかに関して非常に明確です-それはコードの塊で失われます)。
LINQは言語統合クエリの略です。C#内で「SQLスタイル」のクエリ言語を直接使用して、データソースから情報を抽出できます。
そのデータソースは、XMLファイル(Linq to XML)にすることもできます。
あるいは、単なるオブジェクトのコレクションクラス-Linq to Objectsですらあります。
LINQはクエリテクノロジを表し、名前の残りの部分はクエリされるデータのソースを表します。
少し余分な背景について:
データセットは、データがデータベースから.netデータセットに読み込まれるADO.netオブジェクトであり、Linqを使用して、読み込まれたデータにクエリを実行できます。
LINQ to SQLは、データベースとLINQのツーSQLへのマップは、SQL Serverデータベースからデータをロードするの面倒を見るという.NETのクラスを定義します
最後に、エンティティフレームワークは、データベースとオブジェクトマッピングをXMLで定義し、Linqを使用して、このマッピングを介して読み込まれるデータをクエリできるシステムです。