メソッドからクエリを返す方法
この例では、メソッドから、クエリを戻り値として返す方法と out
パラメーターとして返す方法を示します。
クエリ オブジェクトはコンポーザブルです。つまり、メソッドからクエリを返すことができます。 クエリを表すオブジェクトには、結果のコレクションではなく、必要に応じて結果を生成する手順が格納されます。 メソッドからクエリ オブジェクトを返すメリットは、そのオブジェクトをさらに構成したり変更したりできることです。 そのため、クエリを返すメソッドの戻り値または out
パラメーターも同じ型である必要があります。 メソッドがクエリを具象型 List<T> または Array に実体化する場合は、そのメソッドは、クエリ自体ではなくクエリ結果を返すと見なされます。 メソッドから返されたクエリ変数は、引き続き構成または変更できます。
例
次の例で、1 番目のメソッド QueryMethod1
はクエリを戻り値として返し、2 番目のメソッド QueryMethod2
はクエリを out
パラメーター (例では returnQ
) として返します。 どちらの場合も返されるのはクエリであり、クエリ結果ではないことにご注意ください。
IEnumerable<string> QueryMethod1(int[] ints) =>
from i in ints
where i > 4
select i.ToString();
void QueryMethod2(int[] ints, out IEnumerable<string> returnQ) =>
returnQ =
from i in ints
where i < 4
select i.ToString();
int[] nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var myQuery1 = QueryMethod1(nums);
クエリ myQuery1
は、次の foreach ループで実行されます。
foreach (var s in myQuery1)
{
Console.WriteLine(s);
}
マウス ポインターで myQuery1
をポイントすると、その型が表示されます。
myQuery1
を使わず、直接 QueryMethod1
から返されたクエリも実行できます。
foreach (var s in QueryMethod1(nums))
{
Console.WriteLine(s);
}
QueryMethod1
の呼び出しをマウス ポインターでポイントすると、戻り値の型が表示されます。
QueryMethod2
は、クエリを out パラメーターの値として返します。
QueryMethod2(nums, out IEnumerable<string> myQuery2);
// Execute the returned query.
foreach (var s in myQuery2)
{
Console.WriteLine(s);
}
クエリの構成を使って、クエリを変更できます。 この例では、前のクエリ オブジェクトを使って新しいクエリ オブジェクトが作成されています。 この新しいオブジェクトは、元のクエリ オブジェクトとは異なる結果を返します。
myQuery1 =
from item in myQuery1
orderby item descending
select item;
// Execute the modified query.
Console.WriteLine("\nResults of executing modified myQuery1:");
foreach (var s in myQuery1)
{
Console.WriteLine(s);
}
関連項目
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示