61 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: LINQ
							 | 
						|||
| 
								 | 
							
								localeTitle: LINQ
							 | 
						|||
| 
								 | 
							
								---
# LINQ(语言集成查询)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								LINQ(语言集成查询)是一种Microsoft编程模型和方法,它基本上将正式查询功能添加到基于Microsoft .NET的编程语言中。 LINQ为操作数据提供了紧凑,富有表现力和可理解的语法。 LINQ的真正价值在于它能够将相同的查询应用于SQL数据库,数据集,列表,字典等。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 例
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								LINQ可用于过滤,转换,搜索数据以及更多复杂任务。假设我们有以下对象列表:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```csharp
							 | 
						|||
| 
								 | 
							
								var fruits = new List<Fruit>() { 
							 | 
						|||
| 
								 | 
							
								    new Fruit() { Id = 1, Name = "Orange",     Color = "Orange", Quantity: 3   }, 
							 | 
						|||
| 
								 | 
							
								    new Fruit() { Id = 2, Name = "Strawberry", Color = "Red",    Quantity: 12  }, 
							 | 
						|||
| 
								 | 
							
								    new Fruit() { Id = 3, Name = "Grape",      Color = "Purple", Quantity: 25  }, 
							 | 
						|||
| 
								 | 
							
								    new Fruit() { Id = 4, Name = "Pineapple",  Color = "Yellow", Quantity: 1   }, 
							 | 
						|||
| 
								 | 
							
								    new Fruit() { Id = 5, Name = "Apple",      Color = "Red",    Quantity: 5   }, 
							 | 
						|||
| 
								 | 
							
								    new Fruit() { Id = 6, Name = "Mango",      Color = "Yellow", Quantity: 2   } 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								然后我们可以做以下事情:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```csharp
							 | 
						|||
| 
								 | 
							
								// Get the name of the first fruit 
							 | 
						|||
| 
								 | 
							
								 var firstName = fruits.Select(f => f.Name).First(); // Orange 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 // Count how many fruits are red 
							 | 
						|||
| 
								 | 
							
								 var qntRed = fruits.Where(Color == "Red").Count(); // 2 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 // Create a list of yellow fruits 
							 | 
						|||
| 
								 | 
							
								 var yellowFruits = fruits.Where(f => f.Color == "Yellow").ToList(); // { Pineapple, Mango } 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 // Orders list by quantity from most to less 
							 | 
						|||
| 
								 | 
							
								 var orderedFruits = fruits.OrderByDescending(f => f.Quantity).ToList(); // {Grape, Strawberry, Orange, Apple, Mango, Pineapple} 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 // Sum the quantity of fruits 
							 | 
						|||
| 
								 | 
							
								 var quantity = fruits.Sum(f => f.Quantity); // 53 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 // Check if there are any green fruits 
							 | 
						|||
| 
								 | 
							
								 var hasGreen = fruits.Any(f => f.Color == "Green"); // false 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 // Group fruits by color into a dictionary 
							 | 
						|||
| 
								 | 
							
								 var fruitsByColor = fruits.GroupBy(g => g.Color).ToDictionary(k => k.Key, v => v.ToList()); // Dictionary of list of fruits by color 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 // linq operations can be concatenated and are not performed as long as data is needed 
							 | 
						|||
| 
								 | 
							
								 var logs = new List<Log>; 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 if (filterBySeverity) 
							 | 
						|||
| 
								 | 
							
								    logs = logs.Where(p => p.Severity == severity); 
							 | 
						|||
| 
								 | 
							
								    //IQueryable 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 if (filterByUser) 
							 | 
						|||
| 
								 | 
							
								    logs = logs.Where(p => p.User == user); 
							 | 
						|||
| 
								 | 
							
								    //IQueryable 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								    result = logs.ToList(); 
							 | 
						|||
| 
								 | 
							
								    //List<log> 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```
							 |