6

固定数の結果を取得するために .Take() を使用しています。

を取得する最良の方法は何ですかTotalCountBeforeTake(つまり、.Take() を使用しなかったかのように)?

TotalCountBeforeTakeクエリを 2 回実行せずに取得できますか?

        var Results = (from results in db.FindWords(term)
                       orderby results.word
                       select results.word).Take(100);

        //just to get the total record count
        int TotalCountBeforeTake = (from results in db.FindWords(term)
                            select results.word).Count();

        // only showing 100 out of TotalCountBeforeTake results,
        // but in order to know the TotalCountBeforeTake I had to run the query twice.
        foreach (var result in Results)
        {
            Console.Write(result.ToString());
        }
4

3 に答える 3

10

項目の総数と項目のサブセットの 2 つのことを照会します。したがって、次の 2 つのクエリを実行する必要があります。

    // Define queries
    var query1 = from results in db.FindWords(term)
                 orderby results.word
                 select results.word;

    var query2 = query1.Take(100);

    // Run queries
    int totalCountBeforeTake = query1.Count();

    foreach (var result in query2)
    {
        Console.Write(result.ToString());
    }
于 2013-08-24T09:20:45.630 に答える
1

これを分割せずにカウントを取得する方法はわかりません(他の誰かがそうすることが望ましいです)が、あなたの状況では次のことをお勧めします:

//first get the records
var query = (from results in db.FindWords(term)
                       orderby results.word
                       select results.word).ToList();

//get the total record count
int TotalCountBeforeTake = query.Count();

// only showing 100 out of results,
foreach (var result in query.Take(100))
{
    Console.Write(result.ToString());
}
于 2013-08-24T09:21:00.920 に答える
-3

IEnumerables と LINQ を使用して、選択チェーンを作成します。実際に反復を開始する前は、何も実行されていません (選択チェーンの作成を除く)。

リストで同じことを達成しようとすると、リストに対して数回の反復が必要になるため、パフォーマンスが大幅に向上するため、これは魔法のようです。

しかし、列挙型を複数回反復し始めると、LINQ の優雅さを複数の操作で購入することになり、パフォーマンス上の利点がゼロ以下になります。

つまり、linq 式を配列に変換して続行します。

 var Results = (from results in db.FindWords(term)
                     orderby results.word
                     select results.word).Take(100).ToArray();

これで、パフォーマンスを低下させることなく、数えたり反復したりできます。

于 2013-08-24T09:19:32.817 に答える