Linq etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Linq etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

6 Mart 2018

C# Func Nedir?

using System;
using System.Linq;

namespace IEnumerableDemo
{
    public delegate int SomeOperation(int x, int y);
    class Program
    {
        static int Sum(int x, int y) => x + y;

        static void Main(string[] args)
        {


            //Örnek SomeOperation iki int girdi alarak int döndüren bir delegatedir. 
            //Burada SomeOperation türüne add metodunu tanımladık.
            SomeOperation add = Sum;
            Console.WriteLine(add(10, 10));
            /*
             ÇIKTI:
             20
             */


            //Func .net içerisine eklenmiş hazır delegate metodlardır.
            //public delegate TResult Func<in T, out TResult>(T arg); gibi 16 girdi 
            //ve bir çıktıya kadar destekleyecek şekilde tanımlanmış generic bir delgatedir.
            //Yukarıda delegate tanımlayarak yaptığımız işlemi delegate
            //tanımlamadan hazır Func delegatesini kullanarak yazdık;
            Func<int, int, int> addF = Sum;
            Console.WriteLine(addF(10, 10));
            /*
             ÇIKTI:
             20
             */

            //Lambda Fonksiyonları da aslında birer delegate metodlardır.
            //Örnekler 
            Func<int, string> func1 = (x) => string.Format("string = {0}", x);
            Func<bool, int, string> func2 = (b, x) => string.Format("string = {0} and {1}", b, x);
            Func<double> func3 = () => Math.PI / 2.0;
            Func<int> getRandomNumber = () =>
            {
                var r = new Random().Next(1, 100);
                return r;
            };

            Console.WriteLine(func1.Invoke(1));
            Console.WriteLine(func2.Invoke(true, 2));
            Console.WriteLine(func3.Invoke());
            /*
            ÇIKTI:
            string = 1
            string = True and 2
            1,5707963267949
            */
            Console.WriteLine(getRandomNumber());



            //Kullanımı için lambda fonksiyonları güzel bir örnektir.
            //Yazılabilecek filtreleme ve seçimi işleme işlemlerini
            //Func ile yazarak çeşitli yerlerde kulllanabiliriz..

            //Filtreleme için yazıldı. Çift Sayıları Seç
            Func<int, bool> evenNumbers = (x) => x % 2 == 0;

            //Seçimi İşleme Tersine Çevir ve String Türüne Dönüştür.
            Func<int, string> reciprocal = (x) => $"{ x } + {-1 * x} = 0";

            int[] values = { 1, 2, 3, 4, 5, 6 };
            var res = values.Where(evenNumbers).Select(reciprocal);
            foreach (var item in res)
                Console.WriteLine(item);
            /*
           ÇIKTI:
            2 + -2 = 0
            4 + -4 = 0
            6 + -6 = 0
           */
        }
    }
}


5 Mart 2018

Linq: OrderBy, ThenBy Kullanımı ve Farkı

using System;
using System.Collections.Generic;
using System.Linq;

namespace TestOrderByThenBy
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = Foo.GenerateList(10);
            foreach (var item in list)            
                Console.WriteLine(item);
            /* INITIAL

                A:3      B:1     C:3     D:1
                A:4      B:1     C:4     D:1
                A:4      B:2     C:4     D:2
                A:4      B:2     C:0     D:2
                A:0      B:3     C:0     D:3
                A:0      B:3     C:1     D:3
                A:1      B:3     C:1     D:4
                A:1      B:4     C:1     D:4
                A:2      B:4     C:2     D:0
                A:2      B:0     C:2     D:0
            */



            Console.WriteLine("--------------OrderBy(q => q.A).OrderBy(q => q.B).OrderBy(q => q.C).OrderBy(q => q.D)-----------------");

           

            foreach (var item in list.OrderBy(q=>q.A).OrderBy(q=>q.B).OrderBy(q=>q.C).OrderBy(q=>q.D))
                Console.WriteLine(item);


            /* ORDER BY
               A:3      B:0     C:3     D:0
               A:3      B:1     C:3     D:1
               A:4      B:1     C:4     D:1
               A:4      B:2     C:0     D:2
               A:4      B:2     C:4     D:2
               A:0      B:2     C:0     D:3
               A:0      B:3     C:1     D:3
               A:1      B:3     C:1     D:4
               A:1      B:4     C:1     D:4
               A:2      B:4     C:2     D:4

           */


            Console.WriteLine("-----------------.OrderBy(q => q.A).ThenBy(q => q.B).ThenBy(q => q.C).ThenBy(q => q.D)-----------------");

            foreach (var item in list.OrderBy(q => q.A).ThenBy(q => q.B).ThenBy(q => q.C).ThenBy(q => q.D))
                Console.WriteLine(item);
            /*
                A:0      B:2     C:0     D:3
                A:0      B:3     C:0     D:3
                A:1      B:3     C:1     D:4
                A:1      B:4     C:1     D:4
                A:2      B:0     C:2     D:0
                A:3      B:0     C:3     D:0
                A:3      B:1     C:3     D:1
                A:3      B:1     C:4     D:1
                A:4      B:2     C:0     D:2
                A:4      B:2     C:4     D:2
             */

        }
        public class Foo
        {
            public int A { get; set; }
            public int B { get; set; }
            public int C { get; set; }
            public int D { get; set; }

            static int seed = 0;

            public override string ToString()
            {
                return $"A:{A} \t B:{B} \t C:{C} \t D:{D} \t";

            }

            public static IEnumerable GenerateList(int count)
            {
                for (int i = 0; i < count; i++)
                {
                    yield return new Foo()
                    {
                        A = new Random(seed++).Next(5),
                        B = new Random(seed++).Next(5),
                        C = new Random(seed++).Next(5),
                        D = new Random(seed++).Next(5)
                    };
                }
            }
            
        }
    }
}