2

の違いは何ですか

public static IEnumerable<TSource> Where<TSource>
        (this IEnumerable<TSource> source, Func<TSource, bool> predicate)

public static IQueryable<TSource> Where<TSource>
        (this IQueryable<TSource> source, 
         Expression<Func<TSource, bool>> predicate)

どちらのメソッドも同じ方法でラムダ式を受け入れることができます。

List<string> fruits =
                new List<string> { "apple", "passionfruit", "banana", "mango", 
                                "orange", "blueberry", "grape", "strawberry" };
IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6);

デリゲート関数とデリゲート関数の表現が存在するのはなぜですか?私はそれを気にする必要がありますか?

4

4 に答える 4

5

AnIEnumerableはC#アイテムのシーケンスです。のIEnumerableバージョンはSelect、C#で、入力内の項目を文字通り繰り返し、IEnumerableデリゲート関数に対してそれらをテストし、一致するものを生成します。

IQueryableただし、はSQLテーブルの項目などを表すことができます。(または他の多くの種類のデータソースですが、SQLが最も一般的です。)のIQueryableバージョンはSelect、式をSQLクエリ(または同様のもの)の一部に変換でき、SQLに戻す項目を決定する負担を渡します。サーバー(または同様のもの)。

この違いについて心配する必要はありません。LINQはこれらすべての詳細を隠すことができます。C#オブジェクトのリストをクエリする場合は、IEnumerableバージョンが使用されます。Linq-to-SQLを介してSQLをクエリしている場合は、IQueryableバージョンが使用されます。

于 2012-06-21T10:49:16.980 に答える
4

1つはで動作しIEnumerable<T>、もう1つはで動作しIQueryable<T>ます。

于 2012-06-21T10:42:23.793 に答える
2

またはマッパーの答えは最も適切で単純です。ここで確認できるIEnumerableとIQueryableの違いは何であるかを確認する必要があると思います

于 2012-06-21T10:50:31.033 に答える
2

最終的にIQueryable<T>使用されるデータソース(SqlServerまたはその他のもの)がまだ照会されておらず、生成されたSQLが追加の条件によって変更される可能性がある場合。

可能性のIEnumerable<T>あるクエリが具体化され、コレクションのみをフィルタリングします。

于 2012-06-21T10:49:46.197 に答える