#region Types public enum Countries { USA, Italy, } public class Customer { public string Name {get;set;} public string City { get; set; } public Countries Country { get; set; } public Order[] Orders { get; set; } public override string ToString() { return String.Format("Name: {0} - City: {1} - Country: {2}", this.Name, this.City, this.Country); } } public class Order { public int IdOrder { get; set; } public int Quantity { get; set; } public bool Shipped { get; set; } public string Month { get; set; } public int IdProduct { get; set; } public override string ToString() { return String.Format("IdOrder: {0} - IdProduct: {1} - Quantity: {2} - Shipped: {3} - Month: {4}", this.IdOrder, this.IdProduct, this.Quantity, this.Shipped, this.Month); } } public class Product { public int IdProduct { get; set; } public decimal Price { get; set; } public override string ToString() { return String.Format("IdProduct: {0} - Price: {1}", this.IdProduct, this.Price); } } #endregion class Program { private static Customer[] customers; private static Product[] products; static void LoadData() { customers = new Customer[] { new Customer {Name = "Paolo", City = "Brescia", Country = Countries.Italy, Orders = new Order[] { new Order {IdOrder = 1, Quantity = 3, IdProduct = 1, Shipped = false, Month = "January"}, new Order {IdOrder = 2, Quantity = 5, IdProduct = 2, Shipped = true, Month = "May"}}}, new Customer {Name = "Marco", City = "Torino", Country = Countries.Italy, Orders = new Order[] { new Order {IdOrder = 3, Quantity = 10, IdProduct = 1, Shipped = false, Month = "July"}, new Order {IdOrder = 4, Quantity = 20, IdProduct = 3, Shipped = true, Month = "December"}}}, new Customer {Name = "James", City = "Dallas", Country = Countries.USA, Orders = new Order[] { new Order {IdOrder = 5, Quantity = 20, IdProduct = 3, Shipped = true, Month = "December"}}}, new Customer {Name = "Frank", City = "Seattle", Country = Countries.USA, Orders = new Order[] { new Order {IdOrder = 6, Quantity = 20, IdProduct = 5, Shipped = false, Month = "July"}}}}; products = new Product[] { new Product {IdProduct = 1, Price = 10 }, new Product {IdProduct = 2, Price = 20 }, new Product {IdProduct = 3, Price = 30 }, new Product {IdProduct = 4, Price = 40 }, new Product {IdProduct = 5, Price = 50 }, new Product {IdProduct = 6, Price = 60 }}; } static Program() { LoadData(); } static void Main(string[] args) { // restrictionOperatorWithIndex(); // projectionWithIndex(); //selectManySample(); selectManySampleWithCustomSelector(); } //使用分页的Where static void restrictionOperatorWithIndex() { var expr = customers .Where((c, index) => (c.Country == Countries.Italy && index >= 1)) .Select(c => new { c.Name }); foreach (var item in expr) { Console.WriteLine(item); } } //使用分页的Select static void projectionWithIndex() { var expr = customers .Select((c, index) => new { index, c.Name, c.Country }); foreach (var item in expr) { Console.WriteLine(item); } } //SelectMany static void selectManySample() { var orders = customers .Where(c => c.Country == Countries.Italy) .SelectMany(c =>c.Orders); //查询表达式 //var orders = from c in customers // where c.Country == Countries.Italy // from o in c.Orders // select o; foreach (var item in orders) { Console.WriteLine(item); } } static void selectManySampleWithCustomSelector() { var items = customers .Where(c => c.Country == Countries.Italy) .SelectMany(c => c.Orders, (c, o) => new { o.Quantity, o.IdProduct }); //查询表达式 //var items = from c in customers // where c.Country == Countries.Italy // from o in c.Orders // select new { o.Quantity, o.IdProduct }; foreach (var item in items) { Console.WriteLine(item); } } }