2

これはばかげた質問のように聞こえるかもしれませんが、どこにも明確な答えが見つかりませんでした。

IQueryable<MyObject>LINQ-to-SQL クエリからオブジェクトを返す関数があります。.CountIQueryable オブジェクトは遅延評価を利用することを知っているので、オブジェクトを返す前に使用して列挙したくありません。ただし、呼び出し元に戻す前に、「null」または空でないことを確認したいと思います。理由は、クエリが結果を返さない場合、呼び出し元が無効なパラメーターを渡したということなので、例外をスローしたいと考えています。

この質問:一致がない場合の LINQ の結果は? この質問の私のバージョンに対して直接的な答えを提供しているようには見えませんでした。

私の質問は: IQueryable オブジェクトを列挙せずに空かどうかを確認する方法はありますか? チェックdefault(IQueryable<T>)はトリックを行いますか?

4

2 に答える 2

3

IQueryable オブジェクトを列挙せずに空かどうかを確認する方法はありますか?

いいえ、それは不可能です。

クエリに少なくとも 1 つの結果があるかどうかを判断する唯一の方法は、実際にクエリを実行することです。結果セット全体を反復処理する必要はありませんが、最初の項目を取得する必要があります。つまり、クエリをデータベースに送信し、データベースに実行させ、応答を送信する必要があります。

IEnumerableこれを行うことが本当に不可欠な場合は、結果セット全体をメモリにプルして、たとえばリストに入れ、チェックを行ってから、ではなくを返すのがおそらく最善の方法IQueryableです。

それ、または単にチェックを行わないでください。

于 2013-10-24T14:34:24.837 に答える
0

.Any()返す前に、LINQ ステートメントでa をいつでも使用できます。そうすれば、ステートメントが何も返さない場合、null 値を取得できます。

于 2013-10-24T14:30:06.833 に答える