| ID | +姓名 | +电子邮件 | +电话 | +操作 | +
|---|---|---|---|---|
| @customer.CustomerID | +@customer.Name | +@customer.Email | +@customer.Phone | ++ @Html.ActionLink("详情", "Details", new { id = customer.CustomerID }) | + @Html.ActionLink("编辑", "Edit", new { id = customer.CustomerID }) | + @Html.ActionLink("删除", "Delete", new { id = customer.CustomerID }) + | +
+ @Html.ActionLink("添加新客户", "Create") +
+ + +``` + +- **Create.cshtml**: 添加新客户。 + +```html +@model LinqPractice.Models.Customer + + + + ++ @Html.ActionLink("返回", "Index") +
+ + +``` + +- **Delete.cshtml**: 删除客户。 + +```html +@model LinqPractice.Models.Customer + + + + +确定要删除客户 "@Model.Name" 吗?
+ @using (Html.BeginForm()) + { + @Html.AntiForgeryToken() + @Html.HiddenFor(m => m.CustomerID) + + } ++ @Html.ActionLink("返回", "Index") +
+ + +``` diff --git "a/\346\235\216\345\250\234/20241211-linq\346\237\245\350\257\242.md" "b/\346\235\216\345\250\234/20241211-linq\346\237\245\350\257\242.md" new file mode 100644 index 0000000..cd4a6a5 --- /dev/null +++ "b/\346\235\216\345\250\234/20241211-linq\346\237\245\350\257\242.md" @@ -0,0 +1,85 @@ +# MVC中LINQ查询 + +## 1. LINQ简介 + +LINQ(Language Integrated Query,语言集成查询)是微软为.NET Framework提供的一种查询技术,允许开发者在C#等语言中直接使用类似SQL的语法进行数据查询和操作。LINQ支持多种数据源,包括集合、数据库、XML等,并提供统一的查询语法。 + +## 2. LINQ查询的基本语法 + +### 2.1 查询表达式语法 + +LINQ查询表达式语法类似于SQL,常见结构如下: + +```csharp +var query = from item in dataSource + where condition + orderby item.Property ascending/descending + select item; +``` + +- **from**: 指定数据源和范围变量。 +- **where**: 过滤数据,返回满足条件的元素。 +- **orderby**: 对结果进行排序,可以指定升序(ascending)或降序(descending)。 +- **select**: 定义查询结果的形状或类型。 + +### 2.2 方法语法 + +方法语法使用扩展方法和Lambda表达式,常见方法包括: + +- **Where**: 过滤数据。 +- **Select**: 投影数据。 +- **OrderBy**: 排序数据。 +- **GroupBy**: 分组数据。 + +示例: + +```csharp +var query = dataSource.Where(item => item.Property > 10) + .OrderBy(item => item.Property) + .Select(item => item.Property); +``` + +## 3. LINQ查询操作符 + +### 3.1 常用操作符 + +- **Where**: 用于筛选数据。 +- **Select**: 用于选择和转换数据。 +- **OrderBy**: 用于排序数据。 +- **GroupBy**: 用于分组数据。 +- **Join**: 用于连接多个数据源。 + +### 3.2 聚合操作符 + +- **Sum**: 计算总和。 +- **Average**: 计算平均值。 +- **Count**: 计算元素数量。 +- **Max** 和 **Min**: 查找最大值和最小值。 + +## 4. LINQ查询的执行 + +### 4.1 延迟执行 + +LINQ查询默认采用延迟执行(Lazy Evaluation),即查询在定义时不立即执行,而是在迭代结果时才执行。这有助于提高性能,尤其是在处理大数据集时。 + +### 4.2 立即执行 + +可以使用诸如 `ToList()`, `ToArray()`, `Count()` 等方法来强制立即执行查询。这些方法会遍历查询结果并生成一个新的集合。 + +## 5. LINQ在MVC中的应用 + +在ASP.NET MVC中,LINQ常用于数据访问层(如Entity Framework)进行数据库操作。以下是一个简单的示例: + +```csharp +public ActionResult GetCustomers(string city) +{ + using (var db = new SampleDataContext()) + { + var customers = from c in db.Customers + where c.City == city + select c; + return View(customers.ToList()); + } +} +``` + -- Gitee From 5a3f96dd2518916292549e534d7dc8dc4078e911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=A8=9C?= <2977047384@qq.com> Date: Fri, 13 Dec 2024 11:06:17 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20241211-linq\346\237\245\350\257\242.md" | 26 ++- ...51\345\261\225\346\226\271\346\263\225.md" | 148 ++++++++++++++++++ 2 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 "\346\235\216\345\250\234/20241213-Linq\346\237\245\350\257\242\346\211\251\345\261\225\346\226\271\346\263\225.md" diff --git "a/\346\235\216\345\250\234/20241211-linq\346\237\245\350\257\242.md" "b/\346\235\216\345\250\234/20241211-linq\346\237\245\350\257\242.md" index cd4a6a5..4cc1f80 100644 --- "a/\346\235\216\345\250\234/20241211-linq\346\237\245\350\257\242.md" +++ "b/\346\235\216\345\250\234/20241211-linq\346\237\245\350\257\242.md" @@ -82,4 +82,28 @@ public ActionResult GetCustomers(string city) } } ``` - +# 高级练习 +25. 查询并使用Zip合并 合并两个数组,并创建一个包含元素对的新数组。 +```cs +int[] numbers1 = { 1, 2, 3 }; +int[] numbers2 = { 4, 5, 6 }; +var list = numbers1.Zip(numbers2, (x, y) => x + " " + y); +``` +26. 查询并使用Range生成 生成一个包含1到10的整数数组。 +```cs +var list = Enumerable.Range(1, 10); +``` +27. 查询并使用Repeat重复 重复一个元素多次,创建一个新数组。 +```cs +var list = Enumerable.Repeat("我是一个元素", 10); +``` +28. 查询并使用Take限制数量 从数组中取出前5个元素。 +```cs +int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; +var list = numbers.Take(5); +``` +29. 查询并使用Skip跳过元素 跳过数组中的前3个元素,然后取出剩余的元素。 +```cs +int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; +var list = numbers.Skip(3); +``` diff --git "a/\346\235\216\345\250\234/20241213-Linq\346\237\245\350\257\242\346\211\251\345\261\225\346\226\271\346\263\225.md" "b/\346\235\216\345\250\234/20241213-Linq\346\237\245\350\257\242\346\211\251\345\261\225\346\226\271\346\263\225.md" new file mode 100644 index 0000000..adaf9d9 --- /dev/null +++ "b/\346\235\216\345\250\234/20241213-Linq\346\237\245\350\257\242\346\211\251\345\261\225\346\226\271\346\263\225.md" @@ -0,0 +1,148 @@ +# LINQ 扩展方法知识笔记 +LINQ 中常用的扩展方法,并扩展相关知识: + +- Zip +- Range +- Repeat +- Take +- Skip + +## 一、LINQ 扩展方法概述 + +LINQ(语言集成查询)提供了一组扩展方法,可以对集合(如数组、列表等)进行各种查询和操作。这些方法主要定义在 `System.Linq` 命名空间下,扩展了 `IEnumerable