1

このスレッドで、Parelle と Task に関する質問がありました。この質問に関連する前の質問

私がやろうとしているのは、sproc を介してエンティティ フレームワークから返されたコレクションを反復処理することです。

すべてのクエリは最初のループでは完全ですが、2 番目のループで前のクエリ結果をスキップしようとすると、クエリの結果を複数回列挙することはできませんというエラーが発生します。

デバッガーが、このコレクションをこの方法でページングできないことを通知していることに気付きました。

.Skip() を使用してそのエラーが発生しないようにするにはどうすればよいですか? 最後に到達するまで、コレクション全体を反復処理できる必要があります。

これを行う魔法は何ですか?

前述のように、一度ループできますが、その後、そのエラーが発生します。

ヘルプ!

ObjectResult<Guid?> memIDs = await Task.Run(() => db.proc_GetCollaborator_UserIDs(projectID));
if (memIDs != null)
{
    while (true)
    {
        var t = memIDs.Take(Environment.ProcessorCount)
                      .Select(id => Task.Run(() => projCollabors.Add(new Collaborator(id.Value, projectID))))
                      .Skip(skip)
                      .ToArray();
        if (t.Length == 0) { break; };
        skip += Environment.ProcessorCount;

        await Task.WhenAll(t);
    };
};
4

1 に答える 1