### LINQ 示例详解 #### 一、限制操作符(Restriction Operators) **1. Where-Simple1** 在这一示例中,我们通过`Where`子句筛选出小于5的数字。 ```csharp public void Linq1() { int[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}; var lowNums = from n in numbers where n < 5 select n; Console.WriteLine("Numbers < 5:"); foreach (var x in lowNums) { Console.WriteLine(x); } } ``` 这段代码展示了如何使用LINQ查询语法来筛选数组中的元素。`Where`子句用于过滤满足条件的元素,本例中是所有小于5的整数。筛选后的结果被存储在`lowNums`变量中,并通过循环打印出来。 **2. Where-Simple2** 此示例展示了如何筛选出库存为零的产品。 ```csharp public void Linq2() { List<Product> products = GetProductList(); var soldOutProducts = from p in products where p.UnitsInStock == 0 select p; Console.WriteLine("Sold out products:"); foreach (var product in soldOutProducts) { Console.WriteLine("{0} is sold out!", product.ProductName); } } ``` 在这个例子中,我们使用了`where`子句来过滤出库存为0的产品,并将这些产品的名称打印出来。这在处理商品列表时非常有用,可以快速找出缺货的商品。 **3. Where-Simple3** 这里展示了如何筛选出库存大于0且单价超过3.00的产品。 ```csharp public void Linq3() { List<Product> products = GetProductList(); var expensiveInStockProducts = from p in products where p.UnitsInStock > 0 && p.UnitPrice > 3.00M select p; Console.WriteLine("In-stock products that cost more than 3.00:"); foreach (var product in expensiveInStockProducts) { Console.WriteLine("{0} is in stock and costs more than 3.00.", product.ProductName); } } ``` 该示例利用`where`子句同时过滤两个条件:库存非空且价格高于3.00。这对于分析产品目录非常有用,特别是当需要关注高价商品时。 **4. Where-Drilldown** 这个例子展示了如何根据特定区域筛选客户及其订单。 ```csharp public void Linq4() { List<Customer> customers = GetCustomerList(); var waCustomers = from c in customers where c.Region == "WA" select c; Console.WriteLine("Customers from Washington and their orders:"); foreach (var customer in waCustomers) { Console.WriteLine("Customer {0}: {1}", customer.CustomerID, customer.CompanyName); foreach (var order in customer.Orders) { Console.WriteLine("Order {0}: {1}", order.OrderID, order.OrderDate); } } } ``` 在此示例中,我们使用`where`子句筛选出来自华盛顿州的客户,并进一步列出这些客户的订单详情。这有助于进行地区性销售分析或客户服务跟踪。 **5. Where-Indexed** 该示例展示了如何结合索引值进行过滤。 ```csharp public void Linq5() { string[] digits = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; var shortDigits = digits.Where((digit, index) => digit.Length < index); Console.WriteLine("Short digits:"); foreach (var d in shortDigits) { Console.WriteLine("The word {0} is shorter than its value.", d); } } ``` 这里使用了带有索引的`Where`方法来筛选出长度小于其索引位置的字符串。这种场景下,可以通过索引与元素本身的属性对比来实现更复杂的过滤逻辑。 #### 二、投影操作符(Projection Operators) **6. Select-Simple1** 此示例演示了如何将数组中的每个元素增加1。 ```csharp public void Linq6() { int[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}; var numsPlusOne = from n in numbers select n + 1; Console.WriteLine("Numbers + 1:"); foreach (var i in numsPlusOne) { Console.WriteLine(i); } } ``` 通过`select`子句对数组中的每个元素进行简单的数学运算,并将结果输出。这是一种常见的数据转换方式,可以应用于多种场景。 **7. Select-Simple2** 这里展示了如何提取产品列表中的产品名称。 ```csharp public void Linq7() { List<Product> products = GetProductList(); var productNames = from p in products select p.ProductName; Console.WriteLine("Product Names:"); foreach (var productName in productNames) { Console.WriteLine(productName); } } ``` 本示例使用`select`子句从产品列表中提取每个产品的名称。这种方法对于处理数据集时提取特定字段非常有效。例如,在显示产品列表时,只需要产品的名称而不是整个对象。 以上这些示例涵盖了LINQ的基本使用场景,包括简单的过滤、投影以及更高级的组合使用。通过这些示例的学习,开发者可以更好地理解LINQ的强大功能及其在实际项目中的应用价值。
剩余58页未读,继续阅读
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助