표준 쿼리 연산자를 함께 연결(C#)(LINQ to XML)
표준 쿼리 연산자를 함께 연결할 수 있습니다. 예를 들어 Enumerable.Where 연산자(where
절에서 호출)를 교차할 수 있으며 지연 방식으로 작동합니다. 즉, 중간 결과가 구체화되지 않습니다.
예: where 절 교차
이 예제에서 Where 메서드는 ConvertCollectionToUpperCase
를 호출하기 전에 호출됩니다. Where 메서드는 이 자습서의 이전 예제에서 사용되는 지연 메서드인 ConvertCollectionToUpperCase
및 AppendString
과 거의 똑같은 방식으로 작동합니다.
한 가지 차이점은 이 경우 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#) 자습서의 마지막 내용입니다.
.NET