LINQ ile kendi tanımladığınız işlemler sonucu oluşturulacak dizilimler elde edebiliriz.
Bu örnek, iki tamsayı dizisinin skaler çarpımını (her iki dizinin aynı sıradaki elemanlarının çarpımının toplamını) bulur.
Örnekte bu işlem için IEnuberable<int> arayüzüne yeni bir yöntem ekleyen bir genişleme yöntemi ve bu
bu yönteme gönderilen, yapılacak işlemi bildirmek için Lambda
İfadesi şeklinde tanımlanan bir isimsiz fonksiyondan yararlanılmaktadır.
İsimsiz fonksiyonda kullanılan yield komutu, IEnumerable arayüzünü (Enumerable = Sayılabilir) uygulayan
ve dolayısıyla GetEnumerator yöntemine sahip sınıflarda koleksiyonun her bir elemanı çağırıldığında gerekli
işlemi yaptıktan sonra işlem sonucunu döndürmek ve tekrar kendi döngüsüne dönülmesi için kullanılır.
http://Bu örneği daha iyi anlayabilmek için Genişletme Yöntemleri ve Lambda İfadeleri yazılarımı inceleyebilirsiniz
// Bu sınıf IEnumerable<int> arayüzünü genişleten bir yöntem tanımlar.
public static class OzelSilsileIslecleri
{
public static IEnumerable<int> Katistir(this IEnumerable<int> birinci,
IEnumerable<int> ikinci,
Func<int, int, int> fonksiyon)
{
IEnumerator<int> Sayici1 = birinci.GetEnumerator();
IEnumerator<int> Sayici2 = ikinci.GetEnumerator();
while (Sayici1.MoveNext() && Sayici2.MoveNext())
{
yield return fonksiyon(Sayici1.Current, Sayici2.Current);
}
}
}
Console.ReadLine();
int[] VectorA = { 0, 2, 4, 5, 6 };
int[] VectorB = { 1, 3, 5, 7, 8 };
IEnumerable CarpimDizisi = VectorA.Katistir(VectorB, (a, b) => a * b);
int SkalerCarpim = CarpimDizisi.Sum();
Console.Write("Çarpım dizisi : ");
foreach (int Carpim in CarpimDizisi)
{
Console.Write(Carpim);
Console.Write(" ");
}
Console.WriteLine();
Console.WriteLine("Vektörlerin skaler çarpımı = {0}", SkalerCarpim);
Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
Çarpım dizisi : 0 6 20 35 48
Vektörlerin skaler çarpımı = 109
Kaynak:
https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b