using System;
delegate int NumericSequence();
class Test {
static NumericSequence Natural() {
return () => { int seed = 0; return seed++; };
}
static void Main() {
NumericSequence natural = Natural();
Console.WriteLine(natural());
Console.WriteLine(natural());
}
}
LINQ
return a lambda function
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]
If your query's lambda expressions reference local variables, these variables are subject to outer variable semantics.
using System;
using System.Collections.Generic;
using System.Linq;
public class MainClass {
public static void Main() {
int[] numbers = { 1, 2 };
int factor = 10;
IEnumerable<int> query = numbers.Select(n => n * factor);
factor = 20;
foreach (int n in query) Console.Write(n + "|");
}
}
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]
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);
}
}
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());
}
}