using System; delegate int NumericSequence(); class Test { static NumericSequence Natural() { int seed = 0; return () => seed++; } static void Main() { NumericSequence natural = Natural(); Console.WriteLine(natural()); Console.WriteLine(natural()); } }
Lambda expression used to declare an expression tree
using System;
using System.Linq;
using System.Linq.Expressions;
class Program {
static void Main(string[] args) {
Expression
ParameterExpression param = Expression.Parameter(typeof(int), “i”);
Expression
Expression.Lambda
Expression.Equal(
Expression.And(
param,
Expression.Constant(1, typeof(int))),
Expression.Constant(1, typeof(int))),
new ParameterExpression[] { param });
Func
for (int i = 0; i < 10; i++) {
if (isOddCompiledExpression(i))
Console.WriteLine(i + " is odd");
else
Console.WriteLine(i + " is even");
}
}
}
[/csharp]
Use join key word
using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Linq; using System.Reflection; class Person { int _id; int _idRole; string _lastName; string _firstName; public int ID { get { return _id; } set { _id = value; } } public int IDRole { get { return _idRole; } set { _idRole = value; } } public string LastName { get { return _lastName; } set { _lastName = value; } } public string FirstName { get { return _firstName; } set { _firstName = value; } } } class Role { int _id; string role; public int ID { get { return _id; } set { _id = value; } } public string Role { get { return role; } set { role = value; } } } class Program { static void Main(string[] args) { List<Person> people = new List<Person> { new Person { ID = 1, IDRole = 1, LastName = "A", FirstName = "B"}, new Person { ID = 2, IDRole = 2, LastName = "G", FirstName = "T"}, new Person { ID = 3, IDRole = 2, LastName = "G", FirstName = "M"}, new Person { ID = 4, IDRole = 3, LastName = "C", FirstName = "G"} }; List<Role> roles = new List<Role> { new Role { ID = 1, Role = "Manager" }, new Role { ID = 2, Role = "Developer" } }; var query = from p in people join r in roles on p.IDRole equals r.ID select p; } }
Join three object list
using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Linq; using System.Reflection; class Salary { int _id; int _year; double _salary; public int ID { get { return _id; } set { _id = value; } } public int Year { get { return _year; } set { _year = value; } } public double SalaryPaid { get { return _salary; } set { _salary = value; } } } class Employee { int _id; int _idRole; string _lastName; string _firstName; public int ID { get { return _id; } set { _id = value; } } public int IDRole { get { return _idRole; } set { _idRole = value; } } public string LastName { get { return _lastName; } set { _lastName = value; } } public string FirstName { get { return _firstName; } set { _firstName = value; } } } class Role { int _id; string role; public int ID { get { return _id; } set { _id = value; } } public string Role { get { return role; } set { role = value; } } } public class MainClass { public static void Main() { List<Employee> people = new List<Employee> { new Employee { ID = 1, IDRole = 1, LastName = "A", FirstName = "B"}, new Employee { ID = 2, IDRole = 2, LastName = "G", FirstName = "T"}, new Employee { ID = 3, IDRole = 2, LastName = "G", FirstName = "M"}, new Employee { ID = 4, IDRole = 3, LastName = "C", FirstName = "G"} }; List<Role> roles = new List<Role> { new Role { ID = 1, Role = "Manager" }, new Role { ID = 2, Role = "Developer" } }; List<Salary> salaries = new List<Salary> { new Salary { ID = 1, Year = 2004, SalaryPaid = 10.00 }, new Salary { ID = 1, Year = 2005, SalaryPaid = 15.00 }, new Salary { ID = 1, Year = 2005, SalaryPaid = 15.00 } }; var query = from p in people join s in salaries on p.ID equals s.ID select new { p.FirstName, p.LastName, s.SalaryPaid }; var querySum = from q in query group q by q.LastName into gp select new { LastName = gp.Key, TotalSalary = gp.Sum(q => q.SalaryPaid) }; } }
Use Join on
using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Linq; using System.Reflection; class Salary { int _id; int _year; double _salary; public int ID { get { return _id; } set { _id = value; } } public int Year { get { return _year; } set { _year = value; } } public double SalaryPaid { get { return _salary; } set { _salary = value; } } } class Employee { int _id; int _idRole; string _lastName; string _firstName; public int ID { get { return _id; } set { _id = value; } } public int IDRole { get { return _idRole; } set { _idRole = value; } } public string LastName { get { return _lastName; } set { _lastName = value; } } public string FirstName { get { return _firstName; } set { _firstName = value; } } } class Role { int _id; string role; public int ID { get { return _id; } set { _id = value; } } public string Role { get { return role; } set { role = value; } } } public class MainClass { public static void Main() { List<Employee> people = new List<Employee> { new Employee { ID = 1, IDRole = 1, LastName = "A", FirstName = "B"}, new Employee { ID = 2, IDRole = 2, LastName = "G", FirstName = "T"}, new Employee { ID = 3, IDRole = 2, LastName = "G", FirstName = "M"}, new Employee { ID = 4, IDRole = 3, LastName = "C", FirstName = "G"} }; List<Role> roles = new List<Role> { new Role { ID = 1, Role = "Manager" }, new Role { ID = 2, Role = "Developer" } }; List<Salary> salaries = new List<Salary> { new Salary { ID = 1, Year = 2004, SalaryPaid = 10000.00 }, new Salary { ID = 1, Year = 2005, SalaryPaid = 15000.00 }, new Salary { ID = 1, Year = 2005, SalaryPaid = 15000.00 } }; var query = from p in people join s in salaries on p.ID equals s.ID where p.ID == 1 select s.SalaryPaid; Console.Write(query.Min()); Console.Write(query.Max()); } }
Join Operator
using System; using System.Linq; using System.Collections; using System.Collections.Generic; public class Employee { public int id; public string firstName; public string lastName; public static ArrayList GetEmployeesArrayList() { ArrayList al = new ArrayList(); al.Add(new Employee { id = 1, firstName = "J", lastName = "R" }); al.Add(new Employee { id = 2, firstName = "W", lastName = "G" }); al.Add(new Employee { id = 3, firstName = "A", lastName = "H" }); al.Add(new Employee { id = 4, firstName = "D", lastName = "L" }); al.Add(new Employee { id = 101, firstName = "K", lastName = "F" }); return (al); } public static Employee[] GetEmployeesArray() { return ((Employee[])GetEmployeesArrayList().ToArray()); } } public class EmployeeOptionEntry { public int id; public long optionsCount; public DateTime dateAwarded; public static EmployeeOptionEntry[] GetEmployeeOptionEntries() { EmployeeOptionEntry[] empOptions = new EmployeeOptionEntry[] { new EmployeeOptionEntry { id = 1, optionsCount = 2, dateAwarded = DateTime.Parse("1999/12/31") }, new EmployeeOptionEntry { id = 101, optionsCount = 2, dateAwarded = DateTime.Parse("1998/12/31") } }; return (empOptions); } } public class MainClass { public static void Main() { Employee[] employees = Employee.GetEmployeesArray(); EmployeeOptionEntry[] empOptions = EmployeeOptionEntry.GetEmployeeOptionEntries(); var employeeOptions = employees .Join( empOptions, e => e.id, o => o.id, (e, o) => new { id = e.id, name = string.Format("{0} {1}", e.firstName, e.lastName), options = o.optionsCount }); foreach (var item in employeeOptions) Console.WriteLine(item); } }
Lambda expression used to declare a delegate
using System;
using System.Linq;
using System.Linq.Expressions;
class Program {
static void Main(string[] args) {
Func
for (int i = 0; i < 10; i++) {
if (isOddDelegate(i))
Console.WriteLine(i + " is odd");
else
Console.WriteLine(i + " is even");
}
}
}
[/csharp]