메서드에서 쿼리를 반환하는 방법

이 예제는 메서드에서 반환 값 및 out 매개 변수로서 쿼리를 반환하는 방법을 보여 줍니다.

쿼리 개체는 구성 가능하므로 메서드에서 쿼리를 반환할 수 있습니다. 쿼리를 나타내는 개체는 결과 컬렉션을 저장하지 않고, 대신 필요할 때 결과를 생성하는 단계를 저장합니다. 메서드에서 쿼리 개체를 반환하는 경우 메서드를 추가로 작성하거나 수정할 수 있다는 이점이 있습니다. 따라서 쿼리를 반환하는 메서드의 반환 값 또는 out 매개 변수도 해당 형식을 가지고 있어야 합니다. 메서드가 쿼리를 구체적인 List<T> 또는 Array 형식으로 구체화하는 경우 쿼리 자체가 아니라 쿼리 결과를 반환하는 것으로 간주됩니다. 메서드에서 반환되는 쿼리 변수는 여전히 구성 또는 수정 가능합니다.

예시

다음 예제에서 첫 번째 메서드 QueryMethod1 는 쿼리를 반환 값으로 반환하고 두 번째 메서드 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);
}

참고 항목