? 投影
□ 遍歷數組索引,Select獲取
int[] indexes = {0, 2};
string[] strs = {"a", "b", "c", "d"};
?
var result = from i in indexes
select strs[i];
?
foreach (string str in result)
{
Console.Write(str + " ");
}
Console.ReadKey();
結果:a c
?
□ 使用集合索引投影匿名對象
static void Main(string[] args)
{
int[] numbers = {0, 3, 4, 5, 7};
var result = numbers.Select((n, index) => new {Num = n, IsValueEqualIndex = (n == index)});
foreach (var item in result)
{
Console.WriteLine("{0}:{1}",item.Num,item.IsValueEqualIndex);
}
Console.ReadKey();
}
結果:
?
□ 2個集合的笛卡爾積
int[] numberA = {0,2};
int[] numberB = {1,3};
?
var result = from a in numberA
from b in numberB
select new {a, b};
foreach (var item in result)
{
Console.WriteLine("{0},{1}",item.a,item.b);
}
Console.ReadKey();
結果:
?
□ 笛卡爾積應用,列出所有客戶的所有訂單
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public List<Order> Orders { get; set; }
}
?
public class Order
{
public int Id { get; set; }
public decimal Total { get; set; }
}
?
Order order1 = new Order(){Id = 1,Total = 10.00m};
Order order2 = new Order(){Id = 2,Total = 20.00m};
Order order3 = new Order(){Id = 3,Total = 30.00m};
?
List<Customer> customers = new List<Customer>()
{
new Customer()
{
Id = 1,
Name = "張三",
Orders = new List<Order>(){order1,order2}
},
new Customer()
{
Id = 2,
Name = "李四",
Orders = new List<Order>() { order3 }
}
};
?
?
var result = from c in customers
from o in c.Orders
select new {c.Id, c.Name, o.Total};
?
foreach (var item in result)
{
Console.WriteLine("客戶編號:{0},姓名:{1},訂單金額:{2}", item.Id,item.Name,item.Total);
}
?
Console.ReadKey();
?
結果:
?
? 分組
□ group n by 條件 into g, g.Key就是分組標準和條件, g代表分組里所有元素的集合
int[] numbers = { 5, 4, 1, 3, 9, 8, 6};
var result = from n in numbers
group n by n%5 into g
select new {Remainder = g.Key, Numbers = g};
?
foreach (var item in result)
{
Console.WriteLine("元素除以5的余數為:{0}",item.Remainder);
foreach (var n in item.Numbers)
{
Console.WriteLine(n);
}
}
Console.ReadKey();
結果:
?
? 連接
□ 根據2個集合的相同部分連接
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
}
?
List<Product> products = new List<Product>()
{
new Product(){Id=1,Name = "體恤衫",Category = "服飾"},
new Product(){Id = 2,Name = "香水",Category = "化妝品"}
};
?
string[] categoreis = new string[]
{
"服飾",
"化妝品",
"電子"
};
?
var result = from c in categoreis
join p in products on c equals p.Category
select new {Category = c, p.Name};
foreach (var item in result)
{
Console.WriteLine(item.Name + "屬于:" + item.Category);
}
Console.ReadKey();
結果:
?
□ 把其中一個集合的所有元素放到一個別名集合中
List<Product> products = new List<Product>()
{
new Product(){Id=1,Name = "體恤衫",Category = "服飾"},
new Product(){Id = 2,Name = "香水",Category = "化妝品"}
};
?
string[] categoreis = new string[]
{
"服飾",
"化妝品",
"電子"
};
?
var result = from c in categoreis
join p in products on c equals p.Category into ps
select new {Category = c, Products = ps};
foreach (var item in result)
{
Console.WriteLine("類別:{0}包括:",item.Category);
foreach (var p in item.Products)
{
Console.WriteLine(" " + p.Name);
}
}
Console.ReadKey();
結果: