0

関数に渡すオブジェクトのリストがあり、内部でそれらをカウントしたいと思います。IQueryable()を使用すると、正しくカウントされませんが、IEnumerable()を使用すると、正しくカウントされます。

public int functCount(IQueryable<MyObject> myLisfOfObjects)  
{
    int numberOfItems = myListOfObjects.Count(o => o.isSet); //isSet is bool property in my object
    return numberOfItem;
}

最初の呼び出しでは正しい数のアイテムが返されますが、リスト内の一部の要素でisSetプロパティを変更すると、最初の呼び出しと同じ数が返されます。

public int functCount(IEnumerable<MyObject> myLisfOfObjects)  
    {
        int numberOfItems = myListOfObjects.Count(o => o.isSet); //isSet is bool property in my object
        return numberOfItem;
    }

しかし、コードをこれに変更すると、毎回正しいカウントが返されます。

誰かが私に違いを説明できますか、そしてなぜこれが起こっているのですか?

4

1 に答える 1

4

これらの関数のいずれかに渡すものは何でもコンパイルエラーを引き起こさないので、それがであると想定するのは安全IQueryableです。これは、SQLステートメントとして再評価され、DBに対して実行されることを意味し.Count()ます(メモリに加えたと思われる変更はすべて無視されます)。ただし、を呼び出す.Count()IEnumerable、メモリ内のコレクションの数を返すだけのまったく異なるメソッドが呼び出されます。

言い換えればIEnumerable<T>.Count()、とIQueryable<T>.Count()はまったく異なる2つの方法であり、異なることを行います。

于 2013-03-11T15:13:10.630 に答える