Find()
との実装の違いがわかりませんWhere()
。偶然にも同じだと思いますが、選択したコレクションの実装に固有のメソッドではなく、LINQ 拡張メソッド ( など)Where()
に固執することをお勧めします。Single[OrDefault]()
これらは拡張メソッドであるため、IEnumerable<T>
必要に応じて別のコレクション実装を選択する柔軟性が高くなります。
ボーナスポイント:
ただし、ここでいくつかのことが心配です-どこかから物をロードし、その後メモリ内でフィルタリングしています。私はもっと似たものを見たいです:
Item item = Item.GetItemForId(2);
(おそらく)データベースにフィルタリングを任せます。それはおそらくSRPに違反していますが、実際には次に向かっています:
IRepository<Item> repository = this.itemRepository;
Item item = repository.Get(2);
完全な Linq to SQL/Entities を使用している場合は、遅延実行を利用して、次のようなことを行うことができます。
Item item = context.Items.SingleOrDefault(i => i.Id == 2);
これは、 を呼び出す前にすべてのアイテムをロードするわけSingleOrDefault()
ではなく、代わりに who 式を調べて、次のような適切な SQL を生成します。
SELECT [fields] FROM Item WHERE Id = @id
これはすべて私の側の仮定ですが、データベースに送信する SQL ステートメントを作成するLinq to Entities (Entity Framework)とLinq to SQLと、 Linq to Objectsには大きな違いがあることを明確にしたいと思いました。同じメソッド呼び出しですが、メモリ内のコレクション オブジェクトを操作します。