web-dev-qa-db-ja.com

エンティティへのlinqとオブジェクトへのlinq-それらは同じですか?

私は通常、entityという用語を使用して、ビジネスデータオブジェクトを表します。私の考えでは、linq to entitiesおよびlinq to objectsは同じでした。それは正しくありませんか?

29
Alex J

それは間違いなくそうではありません。

LINQ-to-Objectsは、_IEnumerable<T>_の拡張メソッドのセットであり、オブジェクトの任意のシーケンスに対してメモリ内クエリ操作を実行できます。メソッドは、必要に応じて単純なデリゲートを受け入れます。

LINQ-to-Entitiesは、_IQueryable<T>_に一連の拡張メソッドを持つLINQプロバイダーです。メソッドは式ツリーを構築し(これがデリゲートが実際に_Expression<>_ sとして渡される理由です)、プロバイダーはその式ツリーの解析に基づいてSQLクエリを構築します。

例として、次のクエリについて考えてみます。

_var query1 = mydb.MyEntity.Select(x => x.SomeProp).Where(x => x == "Prop");
var query2 = mydb.MyEntity.Select(x => x.SomeProp).AsEnumerable().Where(x => x == "Prop");
_

最初のクエリは、selectとwhereで構成される式ツリーを構築し、2つのラムダが実際にはLambdaExpressionsと見なされます。 LINQ-to-Entitiesプロバイダーは、それをSQLに変換し、選択とフィルター処理の両方を行います。

2番目のクエリはAsEnumerable()を挿入します。これにより、クエリの残りの部分でLINQ-to-Objectsが使用されます。その場合、プロバイダーは選択のみに基づいてSQLを生成し、データベースからそれらすべてのレコードを返します。その後、フィルタリングはメモリ内で行われます。明らかに、それははるかに遅くなる可能性があります。

50
dlev

L2oはメモリ内オブジェクト用です。 L2eはデータベースにクエリを実行します。

12
msfanboy

Linq to Objects「LINQto Objects」という用語は、中間LINQを使用せずに、IEnumerableまたはIEnumerableコレクションでLINQクエリを直接使用することを指します。プロバイダーまたはAPI(LINQ toSQLまたはLINQto XMLなど)。 LINQを使用して、List、Array、Dictionaryなどの列挙可能なコレクションをクエリできます。コレクションは、ユーザー定義の場合もあれば、.NET FrameworkAPIによって返される場合もあります。

基本的な意味で、LINQ toObjectsはコレクションへの新しいアプローチを表しています。以前の方法では、コレクションからデータを取得する方法を指定する複雑なforeachループを作成する必要がありました。 LINQアプローチでは、取得したいものを説明する宣言型コードを記述します。

参照: http://msdn.Microsoft.com/en-us/library/bb397919.aspx

Linq to EntityLINQ to Entitiesは、開発者がVisualBasicまたはVisualを使用してEntityFramework概念モデルに対してクエリを記述できるようにする統合言語クエリ(LINQ)サポートを提供します。 C#。 Entity Frameworkに対するクエリは、オブジェクトコンテキストに対して実行されるコマンドツリークエリによって表されます。 LINQ to Entitiesは、統合言語クエリ(LINQ)クエリをコマンドツリークエリに変換し、Entity Frameworkに対してクエリを実行し、EntityFrameworkとLINQの両方で使用できるオブジェクトを返します。 LINQ to Entitiesクエリを作成して実行するプロセスは次のとおりです。参照: http://msdn.Microsoft.com/en-us/library/bb386964.aspx

9
JSJ

エンティティへのLinqは、Entity Frameworkで使用することを目的としていますが、オブジェクトへのLinqは、任意のIEnumerableコレクション用です。

詳細:

  1. Linq to Entities
  2. Linq to Objects
9
onof

Linq2Entitiesは、ADO.NET Entity Framework(データベース)を介したデータのクエリを表します。

Linq2Objectsは、メモリデータ(ローカルオブジェクト)でのクエリを表します。

3
Jan