Esempio n. 1
0
        /// <summary>
        /// Lambda Expression with Multiple Parameters
        /// It is possible to wrap the parameters in parenthesis if you need to pass more than one parameter.
        /// </summary>
        public void LambdaWithMultipleParameters()
        {
            IsYoungerThan isYoungerThan = (s, youngAge) => s.Age < youngAge; //It is also possible to specify the parameter type like this: (Student s,int youngAge) => s.Age >= youngage;
            Student       stud          = new Student()
            {
                Age = 25
            };

            Console.WriteLine(isYoungerThan(stud, 26));
        }
Esempio n. 2
0
        public static void LambdaExample()
        {
            IsYoungerThan isYoungerThan = (s, youngAge) => s.Age < youngAge;

            Student student = new Student()
            {
                Id = 1, Age = 30, Name = "r"
            };

            Console.WriteLine(isYoungerThan(student, 25));


            Print print = () => Console.WriteLine("some thing");

            print();
        }
Esempio n. 3
0
        public static void launchExample()
        {
            IsYoungerThan isYoungerThan = (s, youngAge) => s.Age < youngAge;

            /*Or the following:
             *
             * IsYoungerThan isYoungerThan = (StudentColl s, int youngAge) => s.Age < youngAge;
             *
             */

            Student stud = new Student()
            {
                Age = 25
            };

            Console.WriteLine(isYoungerThan(stud, 26));
        }
        public static void Main()
        {
            //IsYoungerThan isYoungerThan = delegate (Student s, int age)
            //{
            //    return s.Age < age;
            //};

            IsYoungerThan someMethod = (s, youngAge) => s.Age < youngAge;

            Student stud = new Student()
            {
                Age = 25
            };



            Console.WriteLine(someMethod(stud, 26));
        }
Esempio n. 5
0
        public static void launchExample()
        {
            //Wrap expressions in curly braces if you want to have more than one statement in the body
            IsYoungerThan isYoungerThan = (s, youngAge) =>
            {
                //Can add local variables here if needed as well

                Console.WriteLine("Lambda expression with multiple statements in the body");

                return(s.Age < youngAge);
            };

            Student stud = new Student()
            {
                Age = 25
            };

            Console.WriteLine(isYoungerThan(stud, 26));
        }
Esempio n. 6
0
        static void Main(string[] args)
        {
            //Console.WriteLine("Hello World!");

            IsYoungerThan isYoungerThan = (s, youngAge) =>
            {
                Console.WriteLine("Lambda expression with multiple line in the body");
                return(s.Age < youngAge);
            };

            Student stud = new Student()
            {
                Age = 25
            };

            // Console.WriteLine(isYoungerThan(stud, 28));

            //IsYoungerThan isYoungerThan2;

            //isYoungerThan2 = (Student s, int youngAge) => s.Age >= youngage;

            //Console.WriteLine
            IsEvenNumber();
        }
Esempio n. 7
0
        static void Main(string[] args)
        {
            #region Lambda Functions

            //Func<input,output>
            Func <int, int> square = x => x * x;
            Console.WriteLine(square(5));

            Func <double, double> cube = x => x * x * x;

            string message1 = "O Benfica é o maior...";
            string message2 = "O Portinho é quase....";
            //Action<string, string> concat;
            Action <string, string> concat = new Action <string, string>(WriteToConsole);
            //ou
            //concat = WriteToConsole;
            concat(message1, message2);

            //Action
            Action <Student> PrintStudentDetail = s => Console.WriteLine("Name: {0}, Age: {1} ", s.Name, s.Age);
            PrintStudentDetail(new Student("Aluno", 20));

            //Function
            Func <int, string, bool> isTooLong = (int x, string s) => s.Length > x;
            Console.WriteLine("'Olamundo' tem mais que 12 caracteres? " + isTooLong(12, "Olamundo"));

            Func <int, int, bool> testForEquality = (x, y) => x == y;
            Console.WriteLine("{0} = {1} ? {2}", 12, 12, testForEquality(12, 12));

            //Outro
            Func <Student, bool> isStudentTeenAger = s => s.Age > 12 && s.Age < 20;
            Student std = new Student()
            {
                Age = 21
            };
            bool isTeen = isStudentTeenAger(std);   //devolve False

            //Action
            //Action<Student> PrintStudentDetail = s => Console.WriteLine("Name: {0}, Age: {1} ", s.Name, s.Age);
            //ou
            Action <Student> StudentDetail = s => Console.WriteLine(s.ToString());
            Student          std1          = new Student()
            {
                Name = "Bill", Age = 21
            };
            StudentDetail(std);//output: Name: Bill, Age: 21
            #endregion

            #region Lambda and Delegates

            #region Caso 1

            //Instancia de Delegate
            //Lambda expression com uma só ação
            IsYoungerThan aux1 = (s, youngAge) => s.Age < youngAge;
            //ou
            //IsYoungerThan nc = delegate (Student s, int a) {
            //    return s.Age < a;
            //};

            //Instância de Delegate
            //Lambda expression com várias ações
            IsYoungerThan aux2 = (s, youngAge) => {
                Console.WriteLine("Lambda expression com várias ações");
                return(s.Age < youngAge);
            };

            Student stud = new Student("André", 25);
            Console.WriteLine(aux2(stud, 26));          //Método anónimo

            #endregion

            #region Caso 2

            //instância de delegate
            NumberChanger nc = delegate(int x)
            {
                Console.WriteLine("Anonymous Method: {0}", x);
            };

            //chama delegate com método anónimo
            nc(10);

            //instância de delegate com método
            nc = new NumberChanger(TestDelegate.AddNum);

            //chama o delegate com o método associado
            nc(5);

            //instância de delegate com outro método
            nc = new NumberChanger(TestDelegate.MultNum);

            //chama o delegate com o método associado
            nc(2);

            Console.ReadKey();
            #endregion

            #endregion

            #region LINQ

            #region Caso 1

            string[] clubes = { "Benfica", "Porto", "Sporting", "Braguinha", "Gil Vicente" };

            //Get only short words
            var shortClubs = from s in clubes where s.Length <= 5 select s;

            //Print each word out
            foreach (string word in shortClubs)
            {
                Console.WriteLine(word);
            }
            #endregion

            #region Caso 2

            IList <Student> studentList = new List <Student>()
            {
                new Student()
                {
                    Id = 1, Name = "André", Age = 13
                },
                new Student()
                {
                    Id = 2, Name = "Joana", Age = 21
                },
                new Student()
                {
                    Id = 3, Name = "João", Age = 18
                },
                new Student()
                {
                    Id = 4, Name = "Paula", Age = 20
                },
                new Student()
                {
                    Id = 5, Name = "Joaquim", Age = 15
                }
            };

            //usa delegate
            var teenAgerStudent = studentList.Where(isStudentTeenAger);
            Console.WriteLine("Lindinhos:");
            foreach (Student s in teenAgerStudent)
            {
                Console.WriteLine(s.Name);
            }

            //Compreensão
            var students = from s in studentList
                           where (s.Age < 20 && s.Age > 12)
                           select s;

            //Lambda expression
            List <Student> students1 = studentList.Where(s => (s.Age < 20 && s.Age > 12)).ToList <Student>();

            //Usa Delegate
            var students2 = from s in studentList
                            where isStudentTeenAger(s)
                            select s.Name;

            //Extension Methods
            var filteredResult = studentList.Where((s, i) => {
                if (i % 2 == 0)         // if even element
                {
                    return(true);
                }
                return(false);
            });

            foreach (var s in filteredResult)
            {
                Console.WriteLine(s.Name);
            }

            //multiple where
            var filteredResult1 = from s in studentList
                                  where s.Age > 12
                                  where s.Age < 20
                                  select s;

            foreach (var s in filteredResult1)
            {
                Console.WriteLine(s.Name);
            }

            //Order by

            var orderByResult = from s in studentList
                                orderby s.Name descending
                                select s;
            //ou
            var studentsInAscOrder = studentList.OrderBy(s => s.Name);

            var orderByResult2 = from s in studentList
                                 where s.Age < 20
                                 orderby s.Name, s.Age
            select s;                     // new { s.Name, s.Age };

            //Average
            int[]  fibNum       = { 1, 1, 2, 3, 5, 8, 13, 21, 34 };
            double averageValue = fibNum.Where(num => num % 2 != 0).Average();
            Console.WriteLine(averageValue);
            Console.ReadLine();

            //All - Se todos verificam
            bool areAllStudentsTeenAger = studentList.All(s => s.Age > 12 && s.Age < 20);
            Console.WriteLine(areAllStudentsTeenAger);

            //Any - Se pelo menos um verifica
            bool areAllStudentsTeenAger1 = studentList.Any(s => s.Age > 12 && s.Age < 20);


            //Contains
            IList <int> intList = new List <int>()
            {
                1, 2, 3, 4, 5
            };
            bool result = intList.Contains(10);  // returns false

            //Contains Student
            Student st = new Student()
            {
                Id = 3, Name = "Seis"
            };
            bool result1 = studentList.Contains(st, new StudentComparer());
            Console.WriteLine(result1);

            #endregion

            #endregion
        }
Esempio n. 8
0
        static void Main(string[] args)
        {
            string[] names       = { "Bill", "Steve", "James", "Mokhan" };
            var      myLinqQuery = from name in names
                                   where name.Contains('a')
                                   select name;

            foreach (var name in myLinqQuery)
            {
                Console.Write(name + " ");
            }
            Console.WriteLine();

            Student[] studentArray =
            {
                new Student()
                {
                    StudentId = 1, StudentName = "John", Age = 18, StandardId = 1
                },
                new Student()
                {
                    StudentId = 2, StudentName = "Steve", Age = 21, StandardId = 1
                },
                new Student()
                {
                    StudentId = 3, StudentName = "Bill", Age = 25, StandardId = 2
                },
                new Student()
                {
                    StudentId = 4, StudentName = "Ram", Age = 20, StandardId = 3
                },
                new Student()
                {
                    StudentId = 5, StudentName = "Ron", Age = 31, StandardId = 3
                },
                new Student()
                {
                    StudentId = 6, StudentName = "Chris", Age = 17, StandardId = 2
                },
                new Student()
                {
                    StudentId = 7, StudentName = "Rob", Age = 19
                }
            };
            //Use LINQ to find teenages students
            Student[] teenAgerStudents = studentArray.Where(s => s.Age > 12 && s.Age < 20).ToArray();

            //Use LINQ to find first student whose name is Bill
            Student bill = studentArray.Where(s => s.StudentName == "Bill").FirstOrDefault();
            //Use  LINQ to find whose StudentID is 5
            Student student5 = studentArray.Where(s => s.StudentId == 5).FirstOrDefault();

            //string collection
            IList <string> stringList = new List <string>()
            {
                "C# Tutorials",
                "VB.NET Tutorials",
                "Learn C++",
                "MVC Tutorials",
                "Java"
            };
            var result = from s in stringList
                         where s.Contains("Tutorials")
                         select s;

            Console.WriteLine("\nTutorials: ");
            foreach (var str in result)
            {
                Console.WriteLine(str);
            }

            //LINQ Query Syntax to find teenager students
            var teenAgerStudent = from s in studentArray
                                  where s.Age > 12 && s.Age < 20
                                  select s;

            Console.WriteLine("\nTeen Age Students: ");
            foreach (Student std in teenAgerStudent)
            {
                Console.WriteLine(std.StudentName);
            }

            //LINQ Method Syntax
            result = stringList.Where(s => s.Contains("Tutorials"));
            Console.WriteLine("\nStrings contains word Tutorials");
            foreach (string str in result)
            {
                Console.WriteLine(str);
            }

            //LINQ Method Syntax to find out teenager students
            teenAgerStudent = studentArray.Where(s => s.Age > 12 && s.Age < 20).ToList <Student>();
            Console.WriteLine("\nTeenAgers Students: ");
            foreach (Student s in teenAgerStudent)
            {
                Console.WriteLine($"{s.StudentName} has {s.Age} years");
            }

            //Specify Multiple parameters in lambda expression
            IsYoungerThan isYoungerThan = (s, youngAge) => s.Age < youngAge;

            //Specify Parameter type
            isYoungerThan = (Student s, int youngAge) => s.Age < youngAge;
            Student stud = new Student()
            {
                Age = 25
            };

            Console.WriteLine("Is Younger than 26 years: " + isYoungerThan(stud, 26));

            //Lambda expression without parameters
            Print print = () => Console.WriteLine("This is parameter less lambda expression");

            print();

            // Multiple statements in Lambda expression body
            isYoungerThan = (s, yougAge) =>
            {
                Console.WriteLine("Lambda expression with multiple statemets in the body");
                return(s.Age >= yougAge);
            };
            Console.WriteLine("Is younger than 26 years: " + isYoungerThan(stud, 26));

            // declare local variable in lambda expression
            IsYounger isYounger = s =>
            {
                int youngAge = 18;
                Console.WriteLine("Lambda expression with multiple statemets in the body and local variable ");
                return(s.Age >= youngAge);
            };

            Console.WriteLine("Is younger than 18?: " + isYounger(stud));

            // Lambda expression assigned to Func Delegate
            Func <Student, bool> isStudentTeenAger = s => s.Age > 12 && s.Age < 20;

            stud = new Student()
            {
                Age = 21
            };
            Console.WriteLine("Is Student teenAger?: " + isStudentTeenAger(stud));

            // Lambda expression assigned to action delegate
            Action <Student> PrintStudentDetail = s => Console.WriteLine($"Name: {s.StudentName}, Age: {s.Age}");

            stud = new Student()
            {
                StudentName = "Bill", Age = 21
            };
            PrintStudentDetail(stud);

            // Func delegate in LINQ Methos Syntax
            Func <Student, bool> isStudTeenAger = s => s.Age > 12 && s.Age < 20;
            var teenStudents = studentArray.Where(isStudTeenAger).ToList <Student>();

            Console.Write("TeenAge Students: ");
            foreach (Student s in teenStudents)
            {
                Console.Write($"{s.StudentName} ");
            }
            Console.WriteLine();

            // Func delegate in LINQ Query Syntax
            Func <Student, bool> isStudTeenAge = s => s.Age > 12 && s.Age < 20;
            var teenAgeStudents = from s in studentArray
                                  where isStudTeenAge(s)
                                  select s;

            Console.Write("TeenAge Students: ");
            foreach (Student s in teenAgeStudents)
            {
                Console.Write($"{s.StudentName} ");
            }
            Console.WriteLine();

            // where clause - LINQ query syntax
            var filteredResult = from s in studentArray
                                 where s.Age > 12 && s.Age < 20
                                 select s.StudentName;

            Console.WriteLine("TeenAgers Names list: ");
            foreach (var s in filteredResult)
            {
                Console.WriteLine(s + " ");
            }
            Console.WriteLine();

            // Where extension method in Method Syntax
            var filterResults = studentArray.Where(s => s.Age > 12 && s.Age < 20);

            // LINQ Where extension method with index parameter
            var filterResult = studentArray.Where((s, i) =>
            {
                if (i % 2 == 0)
                {
                    return(true);
                }
                return(false);
            });

            Console.WriteLine("Even id Students: ");
            foreach (var std in filterResult)
            {
                Console.Write(std.StudentName + " ");
            }
            Console.WriteLine();

            // Multiple where clause
            filterResult = from s in studentArray
                           where s.Age > 12
                           where s.Age < 20
                           select s;

            Console.Write("TeenAgers: ");
            foreach (var s in filterResult)
            {
                Console.Write(s.StudentName + " ");
            }
            Console.WriteLine();
            filterResult = studentArray.Where(s => s.Age > 12).Where(s => s.Age < 20);
            Console.Write("TeenAgers: ");
            foreach (var s in filterResult)
            {
                Console.Write(s.StudentName + " ");
            }
            Console.WriteLine();

            // Filtering Operator - OfType
            IList mixedList = new ArrayList();

            mixedList.Add(0);
            mixedList.Add("One");
            mixedList.Add("Two");
            mixedList.Add(3);
            mixedList.Add(new Student()
            {
                StudentId = 1, StudentName = "Bill"
            });

            var stringResult = from s in mixedList.OfType <string>()
                               select s;
            var intResult = from s in mixedList.OfType <int>()
                            select s;
            var stdResult = from s in mixedList.OfType <Student>()
                            select s;

            // OfType in method Syntax
            stringResult = mixedList.OfType <string>();
            intResult    = mixedList.OfType <int>();

            // OrderBy in Query Syntax

            var orderByResult = from s in studentArray
                                orderby s.StudentName
                                select s;
            var orderByDescending = from s in studentArray
                                    orderby s.StudentName descending
                                    select s;

            // OrderBy in Method Syntax
            orderByResult     = studentArray.OrderBy(s => s.StudentName);
            orderByDescending = studentArray.OrderByDescending(s => s.StudentName);

            // OrderBy multile sorting in Query Syntax
            var orderByResults = from s in studentArray
                                 orderby s.StudentName, s.Age
                select new { s.StudentName, s.Age };

            // ThenBy & ThenByDescending
            var thenByResult     = studentArray.OrderBy(s => s.StudentName).ThenBy(s => s.Age);
            var thenByDescResult = studentArray.OrderBy(s => s.StudentName).ThenByDescending(s => s.Age);

            // GroupBy in Query Syntax
            var groupedResult = from s in studentArray
                                group s by s.Age;

            //iterate each group
            Console.WriteLine();
            foreach (var ageGroup in groupedResult)
            {
                Console.WriteLine("Age Group: {0}", ageGroup.Key); // each group has a key
                foreach (Student s in ageGroup)
                {
                    Console.WriteLine("Student Name: {0}", s.StudentName);
                }
            }

            // GroupBy in Method Syntax
            groupedResult = studentArray.GroupBy(s => s.Age);
            //iterate each group
            Console.WriteLine();
            foreach (var ageGroup in groupedResult)
            {
                Console.WriteLine("Age Group: {0}", ageGroup.Key); // each group has a key
                foreach (Student s in ageGroup)
                {
                    Console.WriteLine("Student Name: {0}", s.StudentName);
                }
            }

            // ToLookup in method syntax
            var lookupResult = studentArray.ToLookup(s => s.Age);

            foreach (var group in lookupResult)
            {
                Console.WriteLine("Age Group: {0}", group.Key); // each group has a key
                foreach (Student s in group)
                {
                    Console.WriteLine("Student Name: {0}", s.StudentName);
                }
            }

            // Join Operator
            IList <string> firstList = new List <string>()
            {
                "One",
                "Two",
                "Three",
                "Four"
            };
            IList <string> secondList = new List <string>()
            {
                "One",
                "Two",
                "Five",
                "Six"
            };
            var innerJoinResult = firstList.Join( // outer sequence
                secondList,                       // inner sequence
                str1 => str1,                     // outerKeySelector
                str2 => str2,                     // innerKeySelector
                (str1, str2) => str1);

            foreach (var str in innerJoinResult)
            {
                Console.WriteLine("{0} ", str);
            }

            //LINQ join method syntax
            IList <Student>  studentList  = studentArray;
            IList <Standard> standardList = new List <Standard>()
            {
                new Standard()
                {
                    StandardId = 1, StandardName = "Standard 1"
                },
                new Standard()
                {
                    StandardId = 2, StandardName = "Standard 2"
                },
                new Standard()
                {
                    StandardId = 3, StandardName = "Standard 3"
                },
                new Standard()
                {
                    StandardId = 4, StandardName = "Standard 4"
                },
            };
            var innerJoin = studentList.Join(    // outer sequence
                standardList,                    // inner sequence
                student => student.StandardId,   // outerKeySelector
                standard => standard.StandardId, // innerKeySelector
                (student, standard) => new       // result selector
            {
                StudentName  = student.StudentName,
                StandardName = standard.StandardName
            });

            foreach (var obj in innerJoin)
            {
                Console.WriteLine("{0} - {1}", obj.StudentName, obj.StandardName);
            }

            // inner Join in Query Syntax
            var innerQueryJoin = from s in studentList
                                 join st in standardList
                                 on s.StandardId equals st.StandardId
                                 select new
            {
                StudentName  = s.StudentName,
                StandardName = st.StandardName
            };

            // GroupJoin in method syntax
            var groupJoin = standardList.GroupJoin(studentList,
                                                   std => std.StandardId,
                                                   s => s.StandardId,
                                                   (std, studentsGroup) => new
            {
                Students         = studentsGroup,
                StandardFullName = std.StandardName
            });

            Console.WriteLine("GroupJoin in method syntax");
            foreach (var item in groupJoin)
            {
                Console.WriteLine(item.StandardFullName);
                foreach (var student in item.Students)
                {
                    Console.WriteLine(student.StudentName);
                }
            }

            // GroupJoin in query syntax
            var groupQueryJoin = from std in standardList
                                 join s in studentList
                                 on std.StandardId equals s.StandardId
                                 into studentGroup
                                 select new
            {
                Students     = studentGroup,
                StandardName = std.StandardName
            };

            Console.WriteLine("GroupJoin in query syntax");
            foreach (var item in groupQueryJoin)
            {
                Console.WriteLine(item.StandardName);
                foreach (var student in item.Students)
                {
                    Console.WriteLine(student.StudentName);
                }
            }

            // Select in Query Syntax
            var selectResult = from s in studentList
                               select new { Name = "Mr. " + s.StudentName, Age = s.Age };

            Console.WriteLine("\nSelect results: ");
            foreach (var item in selectResult)
            {
                Console.WriteLine("Student Name: {0}, Age: {1}", item.Name, item.Age);
            }

            // Select in Method Syntax
            var selectMethodSyntax = studentList.Select(s => new { Name = s.StudentName, Age = s.Age });

            // All operator method syntax, not suported in query syntax
            bool areAllStudentsTeenAger = studentList.All(s => s.Age > 12 && s.Age < 20);

            Console.WriteLine("areAllStudentsTeenAger?: " + areAllStudentsTeenAger);

            // Any operator in Method Syntax, not suported in query syntax
            bool areAnyStudentTeenAges = studentList.Any(s => s.Age > 12 && s.Age < 20);

            Console.WriteLine("areAnyStudentTeenAges?: " + areAnyStudentTeenAges);

            // Contain Operator on primitive data types
            IList <int> intList = new List <int>()
            {
                1, 2, 3, 4, 5, 6
            };
            bool containResult = intList.Contains(10);

            // Contain Operator on Object Data Types
            Student stude = new Student()
            {
                StudentId = 3, StudentName = "Bill"
            };
            var studentsContainResult = studentList.Contains(stude, new StudentComparer());

            Console.WriteLine($"StudentList Contain {stude.StudentName} student?: {studentsContainResult}");

            // Aggregate in method syntax
            IList <string> strList = new List <string>()
            {
                "One", "Two", "Three", "Four", "Five"
            };
            var commaSeparatedString = strList.Aggregate((s1, s2) => s1 + ", " + s2);

            Console.WriteLine(commaSeparatedString);

            // Aggregate with seed value
            string commaSeparatedStudentNames = studentList.Aggregate <Student, string>(
                "Student Names: ",                                                 // seed value
                (str, s) => str += s.StudentName + ", ");

            Console.WriteLine(commaSeparatedStudentNames);

            int SumOfStudentAge = studentList.Aggregate <Student, int>(0,
                                                                       (totalAge, s) => totalAge += s.Age);

            Console.WriteLine("Total students Age = " + SumOfStudentAge);

            commaSeparatedStudentNames = studentList.Aggregate <Student, string, string>(
                String.Empty,                                             // seed Value
                (str, s) => str += s.StudentName + ", ",                  // returns result using seed value, String.Empty goes to lambda expression as str
                str => str.Substring(0, str.Length - 2));                 // result selector that removes last comma
            Console.WriteLine("Students: " + commaSeparatedStudentNames);

            // Average Method
            var avg = intList.Average();

            Console.WriteLine("Average: {0}", avg);

            var avgAge = studentList.Average(s => s.Age);

            Console.WriteLine("Students Age Average: {0}", avgAge);

            // Count method in Method Syntax
            var totalElements = intList.Count();

            Console.WriteLine("Total elements: {0}", totalElements);

            var evenElements = intList.Count(i => i % 2 == 0);

            Console.WriteLine("Even elements count: {0}", evenElements);

            var totalStudents = studentList.Count();

            Console.WriteLine("Total number of students: {0}", totalStudents);
            var adultStudents = studentList.Count(s => s.Age >= 18);

            Console.WriteLine("Number of adult students: {0}", adultStudents);

            // Count Operator in Query Syntax
            var totalStud = (from s in studentList
                             select s.Age).Count();

            Console.WriteLine("Total Students: {0}", totalStud);

            // Max method
            var largest = intList.Max();

            Console.WriteLine("Largest Element: {0}", largest);
            var largestEvenElem = intList.Max(i =>
            {
                if (i % 2 == 0)
                {
                    return(i);
                }
                return(0);
            });

            Console.WriteLine("Largest Even Elem: {0}", largestEvenElem);

            // Max in method Syntax on complex type collection
            var oldest = studentList.Max(s => s.Age);

            Console.WriteLine("OLdest Student is: {0}", oldest);

            var studentWithLongName = studentList.Max();

            Console.WriteLine("Student ID: {0}, Student Name: {1}", studentWithLongName.StudentId, studentWithLongName.StudentName);

            // LINQ sum
            var total = intList.Sum();

            Console.WriteLine("Sum: {0}", total);
            var sumOfEvenElem = intList.Sum(i =>
            {
                if (i % 2 == 0)
                {
                    return(i);
                }
                return(0);
            });

            Console.WriteLine("Sum of Even Elements: {0}", sumOfEvenElem);

            // LINQ sum on complex types
            var sumOfAge = studentList.Sum(s => s.Age);

            Console.WriteLine("Sum of all Student's age: {0}", sumOfAge);
            var sumOfAdultsAge = studentList.Sum(s =>
            {
                if (s.Age >= 18)
                {
                    return(s.Age);
                }
                return(0);
            });

            Console.WriteLine("Sum of Adult's Age: {0}", sumOfAdultsAge);

            // ElementAt & ElementAtOrDefault
            intList = new List <int>()
            {
                10, 21, 30, 45, 50, 87
            };
            stringList = new List <string> {
                "One", "Two", null, "Four", "Five"
            };

            Console.WriteLine("2nd Element in intList: {0}", intList.ElementAt(1));
            Console.WriteLine("2nd Element in stringList: {0}", stringList.ElementAt(1));
            Console.WriteLine("3rd Element in intList: {0}", intList.ElementAtOrDefault(2));
            Console.WriteLine("3rd Element in stringList: {0}", stringList.ElementAtOrDefault(2));
            Console.WriteLine("9th Element in intList: {0}", intList.ElementAtOrDefault(8));
            Console.WriteLine("9th Element in stringList: {0}", stringList.ElementAtOrDefault(8));

            // LINQ First & FirstOrDefault
            stringList = new List <string> {
                null, "Two", "Three", "Four", "Five"
            };
            IList <string> emptyList = new List <string>();

            Console.WriteLine("1st Element in intList: {0}", intList.First());
            Console.WriteLine("1st Even Element in intList: {0}", intList.First(i => i % 2 == 0));
            Console.WriteLine("1st Elem in stringList: {0}", stringList.First());
            Console.WriteLine("1st or depfault Elem in emptyList: {0}", emptyList.FirstOrDefault());

            // SequenceEqual in method Syntax
            IList <string> firstListString = new List <string>()
            {
                "One", "Two", "Three", "Four", "Five"
            };
            IList <string> secondListString = new List <string>()
            {
                "One", "Two", "Three", "Four", "Five"
            };
            bool isEqualStrings = firstListString.SequenceEqual(secondListString);

            Console.WriteLine("SequenceEqual: " + isEqualStrings);

            // Concat method
            var collectionConcat = firstListString.Concat(secondListString);

            Console.WriteLine("Concat method: ");
            foreach (string str in collectionConcat)
            {
                Console.Write(str + " ");
            }
            Console.WriteLine();

            // DefaultIfEmpty method
            var newList1 = emptyList.DefaultIfEmpty();
            var newList2 = emptyList.DefaultIfEmpty("none");

            Console.WriteLine("Count: {0}", newList1.Count());
            Console.WriteLine("Value: {0}", newList1.FirstOrDefault());
            Console.WriteLine("Count: {0}", newList2.Count());
            Console.WriteLine("Value: {0}", newList2.FirstOrDefault());

            // Range Method
            var intCollection = Enumerable.Range(10, 10);

            Console.WriteLine("Total Count: {0}", intCollection.Count());
            for (int i = 0; i < intCollection.Count(); i++)
            {
                Console.WriteLine("Value at index {0} : {1}", i, intCollection.ElementAt(i));
            }

            // Repeat Method
            var intCollect = Enumerable.Repeat(10, 10);

            Console.WriteLine("Total Count: {0}", intCollect.Count());
            for (int i = 0; i < intCollect.Count(); i++)
            {
                Console.WriteLine("Value at index {0} : {1}", i, intCollect.ElementAt(i));
            }

            // Distinct method
            IList <string> stringsList = new List <string>()
            {
                "One", "Two", "Three", "Two", "Three"
            };

            intList = new List <int> {
                1, 2, 3, 2, 4, 4, 3, 5
            };

            var distinctStrings = stringsList.Distinct();

            Console.Write("Distinct strings: ");
            foreach (string s in distinctStrings)
            {
                Console.Write(s + " ");
            }
            Console.WriteLine();
            var dinstinctInts = intList.Distinct();

            Console.Write("Distinct Ints: ");
            foreach (int i in dinstinctInts)
            {
                Console.Write(i + " ");
            }

            var distinctStudents = studentList.Distinct(new StudentComparer());

            Console.WriteLine("Distinct students: ");
            foreach (Student s in distinctStudents)
            {
                Console.WriteLine("Id= {0}, Name= {1} ", s.StudentId, s.StudentName);
            }

            // Except method
            firstListString = new List <string> {
                "One", "Two", "Three", "Four", "Five"
            };
            secondListString = new List <string> {
                "Four", "Five", "Six", "Seven", "Eight"
            };
            var exceptResult = firstListString.Except(secondListString);

            Console.Write("\nExcept results: ");
            foreach (var str in exceptResult)
            {
                Console.Write(str + " ");
            }
            Console.WriteLine();

            // Except Result in complex types
            IList <Student> studentList2 = new List <Student>()
            {
                new Student()
                {
                    StudentId = 1, StudentName = "John", Age = 18, StandardId = 1
                },
                new Student()
                {
                    StudentId = 5, StudentName = "Human", Age = 30
                }
            };
            var resultedCol = studentArray.Except(studentList2, new StudentComparer());

            Console.WriteLine("Except on complex types: ");
            foreach (Student s in resultedCol)
            {
                Console.WriteLine(s.StudentName);
            }
        }
Esempio n. 9
0
        static void Main(string[] args)
        {
            #region Lambda Functions

            //Func<input,output>
            Func <int, int> square = x => x * x;
            Console.WriteLine(square(5));


            string message1 = "O Benfica é o maior...";
            string message2 = "O Portinho é quase....";
            //Action<string, string> concat;
            Action <string, string> concat = new Action <string, string>(WriteToConsole);
            //ou
            //concat = WriteToConsole;

            concat(message1, message2);

            //Lambda
            Func <int, string, bool> isTooLong = (int x, string s) => s.Length > x;

            Console.WriteLine("'Olamundo' tem mais que 12 caracteres? " + isTooLong(12, "Olamundo"));


            Func <int, int, bool> testForEquality = (x, y) => x == y;

            Console.WriteLine("{0} = {1} ? {2}", 12, 12, testForEquality(12, 12));

            #endregion

            //A partir de C# 7
            //Lambda Expressions and Tuplos
            //Func<(int, int, int), (int, int, int)> doubleThem = ns => (2 * ns.Item1, 2 * ns.Item2, 2 * ns.Item3);
            //var numbers = (2, 3, 4);
            //var doubledNumbers = doubleThem(numbers);
            //Console.WriteLine($"The set {numbers} doubled: {doubledNumbers}");

            #region Lambda and Delegates

            #region Caso 1

            //Delegate
            //Lambda expression com uma só ação
            IsYoungerThan aux1 = (s, youngAge) => s.Age < youngAge;

            //Delegate
            //Lambda expression com várias ações
            IsYoungerThan aux2 = (s, youngAge) => {
                Console.WriteLine("Lambda expression com várias ações");
                return(s.Age < youngAge);
            };

            Student stud = new Student()
            {
                Age = 25
            };
            Console.WriteLine(aux2(stud, 26));

            #endregion

            #region Caso 2
            //Outro
            Func <Student, bool> isStudentTeenAger = s => s.Age > 12 && s.Age < 20;
            Student std = new Student()
            {
                Age = 21
            };
            bool isTeen = isStudentTeenAger(std);   //devolve False

            //Action
            //Action<Student> PrintStudentDetail = s => Console.WriteLine("Name: {0}, Age: {1} ", s.Name, s.Age);
            //ou
            Action <Student> PrintStudentDetail = s => Console.WriteLine(s.ToString());
            Student          std1 = new Student()
            {
                Name = "Bill", Age = 21
            };
            PrintStudentDetail(std);//output: Name: Bill, Age: 21
            #endregion

            #endregion

            #region LINQ

            IList <Student> studentList = new List <Student>()
            {
                new Student()
                {
                    Id = 1, Name = "Um", Age = 13
                },
                new Student()
                {
                    Id = 2, Name = "Dois", Age = 21
                },
                new Student()
                {
                    Id = 3, Name = "Tres", Age = 18
                },
                new Student()
                {
                    Id = 4, Name = "Quatro", Age = 20
                },
                new Student()
                {
                    Id = 5, Name = "Cinco", Age = 15
                }
            };

            //usa delegate
            var teenAgerStudent = studentList.Where(isStudentTeenAger);
            Console.WriteLine("Lindinhos:");
            foreach (Student s in teenAgerStudent)
            {
                Console.WriteLine(s.Name);
            }

            //Compreensão
            var students = from s in studentList
                           where (s.Age < 20 && s.Age > 12)
                           select s;

            //Lambda
            var students1 = studentList.Where(s => (s.Age < 20 && s.Age > 12)).ToList <Student>();

            //Usa Delegate
            var students2 = from s in studentList
                            where isStudentTeenAger(s)
                            select s.Name;

            //Extension Methods
            var filteredResult = studentList.Where((s, i) => {
                if (i % 2 == 0)         // if it is even element
                {
                    return(true);
                }
                return(false);
            });

            foreach (var s in filteredResult)
            {
                Console.WriteLine(s.Name);
            }

            //multiple where
            var filteredResult1 = from s in studentList
                                  where s.Age > 12
                                  where s.Age < 20
                                  select s;

            foreach (var s in filteredResult1)
            {
                Console.WriteLine(s.Name);
            }

            //Order by

            var orderByResult = from s in studentList
                                orderby s.Name descending
                                select s;
            //ou
            var studentsInAscOrder = studentList.OrderBy(s => s.Name);

            var orderByResult2 = from s in studentList
                                 where s.Age < 20
                                 orderby s.Name, s.Age
                select new { s.Name, s.Age };

            //All
            bool areAllStudentsTeenAger = studentList.All(s => s.Age > 12 && s.Age < 20);

            Console.WriteLine(areAllStudentsTeenAger);

            //Any - Checks for at least one match
            bool areAllStudentsTeenAger1 = studentList.Any(s => s.Age > 12 && s.Age < 20);


            //Contains

            IList <int> intList = new List <int>()
            {
                1, 2, 3, 4, 5
            };
            bool result = intList.Contains(10);  // returns false

            //Contains Student
            Student st = new Student()
            {
                Id = 3, Name = "Seis"
            };
            bool result1 = studentList.Contains(st, new StudentComparer());
            Console.WriteLine(result1);

            #endregion

            Console.ReadKey();
        }