다음을 통해 공유


표준 쿼리 연산자를 함께 연결(C#)(LINQ to XML)

표준 쿼리 연산자를 함께 연결할 수 있습니다. 예를 들어 Enumerable.Where 연산자(where 절에서 호출)를 교차할 수 있으며 지연 방식으로 작동합니다. 즉, 중간 결과가 구체화되지 않습니다.

예: where 절 교차

이 예제에서 Where 메서드는 ConvertCollectionToUpperCase를 호출하기 전에 호출됩니다. Where 메서드는 이 자습서의 이전 예제에서 사용되는 지연 메서드인 ConvertCollectionToUpperCaseAppendString과 거의 똑같은 방식으로 작동합니다.

한 가지 차이점은 이 경우 Where 메서드가 원본 컬렉션을 반복하고 첫 번째 항목이 조건자를 전달하지 않는 것을 확인한 다음 전달되는 다음 항목을 가져옵니다. 그런 다음 두 번째 항목을 반환합니다.

그러나 기본 아이디어는 동일합니다. 중간 컬렉션은 반드시 필요하지 않는 한 구체화되지 않습니다.

쿼리 식을 사용하면 표준 쿼리 연산자 호출로 변환되며 동일한 원칙이 적용됩니다.

Office Open XML 문서를 쿼리하는 이 단원의 모든 예제에서는 동일한 원칙을 사용합니다. 지연된 실행 및 지연 평가는 LINQ 및 LINQ to XML을 효과적으로 사용하기 위해 이해해야 하는 몇 가지 기본 개념입니다.

public static class LocalExtensions
{
    public static IEnumerable<string>
      ConvertCollectionToUpperCase(this IEnumerable<string> source)
    {
        foreach (string str in source)
        {
            Console.WriteLine("ToUpper: source >{0}<", str);
            yield return str.ToUpper();
        }
    }

    public static IEnumerable<string>
      AppendString(this IEnumerable<string> source, string stringToAppend)
    {
        foreach (string str in source)
        {
            Console.WriteLine("AppendString: source >{0}<", str);
            yield return str + stringToAppend;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        string[] stringArray = { "abc", "def", "ghi" };

        IEnumerable<string> q1 =
            from s in stringArray.ConvertCollectionToUpperCase()
            where s.CompareTo("D") >= 0
            select s;

        IEnumerable<string> q2 =
            from s in q1.AppendString("!!!")
            select s;

        foreach (string str in q2)
        {
            Console.WriteLine("Main: str >{0}<", str);
            Console.WriteLine();
        }
    }
}

이 예제는 다음과 같은 출력을 생성합니다.

ToUpper: source >abc<
ToUpper: source >def<
AppendString: source >DEF<
Main: str >DEF!!!<

ToUpper: source >ghi<
AppendString: source >GHI<
Main: str >GHI!!!<

이 문서는 자습서: 쿼리를 함께 연결(C#) 자습서의 마지막 내용입니다.