基盤となるデータ リポジトリを備えた検索モジュールがあり、検索クエリから最大 25 件の結果を返す必要があるとします。Take() 操作でこれを強制できます。
IEnumerable<Contact> Search(string name)
{
// validation/cleanup on name parameter
IEnumerable<Contact> matching = _repository.Search(name);
return matching.Take(25);
}
次に、25 を超える結果が返される場合 (つまり、検索パラメーターが広すぎる場合) に例外をスローするという追加の要件があるとします。LINQ でこれを行う簡単な方法はありますか? これまでに最も近いのは、最大数よりも1つ多い数を取り、それを操作することです:
IEnumerable<Contact> Search(string name)
{
// validation/cleanup on name parameter
var matching = _repository.Search(name);
var toReturn = matching.Take(26).ToList();
if (toReturn.Count() > 25)
{
throw new Exception("Too many results");
}
return toReturn;
}
ただし、これは必要以上に扱いにくいようです。