Share via


Zincir sorguları örneği (C#) (LINQ to XML)

Bu örnek, Ertelenmiş yürütme örneğindeki örneği oluşturur ve hem ertelenmiş yürütme hem de gecikmeli değerlendirme kullanan iki sorguyu birbirine bağladığınızda ne olduğunu gösterir.

Örnek: Yürütmeyi ertelemek için kullanan yield return ikinci bir uzantı yöntemi ekleme

Bu örnekte, kaynak koleksiyondaki her dizeye belirtilen bir dizeyi ekleyen ve ardından değiştirilen dizeyi veren başka bir uzantı yöntemi tanıtılır AppendString.

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()
            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();
        }
    }
}

Bu örnek aşağıdaki çıkışı oluşturur:

ToUpper: source >abc<
AppendString: source >ABC<
Main: str >ABC!!!<

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

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

Bu örnekte, her uzantı yönteminin kaynak koleksiyondaki her öğe için birer birer çalıştığını görebilirsiniz.

Bu örnekte açıkça belirtilmesi gereken, koleksiyonları veren sorguları zincirlediğimiz halde ara koleksiyonların gerçekleştirilmemesidir. Bunun yerine, her öğe bir gecikmeli yöntemden diğerine geçirilir. Bu, önce bir dize dizisi alan bir yaklaşımdan çok daha küçük bir bellek ayak iziyle sonuçlanır, ardından büyük harfe dönüştürülmüş ikinci bir dize dizisi oluşturur ve son olarak her dizenin sonuna ünlem işareti eklendiği üçüncü bir dize dizisi oluşturur.

Bu öğreticideki sonraki makalede ara gerçekleştirme gösterilmektedir:

Ayrıca bkz.