C

c#

  • dynamic

dynamic o = "a";
dynamic o1 = "a";
o == o1; //true  比较的是字符串的内容而不是引用
  • record 的使用

//record 的使用  
	public record Person(string FirstName, string LastName);
	Person person = new("Nancy", "Davolio");
  • var 和 dynamic

//var 在不好定义类型的情况下使用。
//dynamic 在不知道类型内容的情况下使用。 类是 json的对象。
//存储dynamic 数组,可以进行json序列化
List<dynamic> list = new List<dynamic>(); 
  • linq

from p in list
join emp in db_emp_list on p.UID equals emp.ID
join u in db_user_list on p.DoctorUserID equals u.ID into g
from u in g.DefaultIfEmpty()
select new { id = p.ID, name = emp.Name, dt = p.DT, doctorName = u == null ? "" : u.Name, outStorageUserID = p.OutStorageUserID };
//into g 是 LINQ 查询中的 分组连接(Group Join) 语法的一部分。它的作用是将连接操作的结果存储到一个临时分组变量 g 中。
//将 list 中的每个元素 p 与 db_user_list 中的元素 u 进行连接
//连接条件是 p.DoctorUserID 等于 u.ID
//连接结果不是直接展开,而是先分组放入临时变量 g 中
//from u in g.DefaultIfEmpty() 的作用
//从分组 g 中取出元素 u
//如果分组 g 中没有匹配的元素(即没有找到对应的 u),则使用 DefaultIfEmpty() 提供的默认值(对于引用类型是 null)
//这样就保证了即使右表 (db_user_list) 中没有匹配记录,左表 (list) 的记录仍然会出现在结果中

整个查询相当于 SQL 中的:

SELECT p.ID as id, emp.Name as name, p.DT as dt, 
       ISNULL(u.Name, '') as doctorName, p.OutStorageUserID
FROM list p
INNER JOIN db_emp_list emp ON p.UID = emp.ID
LEFT JOIN db_user_list u ON p.DoctorUserID = u.ID
  • 读取 excel

//读取 excel:
string path = Server.MapPath(System.IO.Path.Combine("Files", saveFileName));
using (var stream = new FileStream(path, FileMode.Open))
      {
          XSSFWorkbook xssWorkbook = new XSSFWorkbook(stream);
          sheet = xssWorkbook.GetSheetAt(0);
    var row = sheet.GetRow(rowNum);
    if (row == null) return string.Empty;
    var cell = row.GetCell(1);
          string v = cell == null ? string.Empty : cell.ToString();
}
  • 匿名类

//匿名类,临时使用的类。
//一般可以用在 后台调用函数返回前台的临时数据结构
//或者需要临时使用数据结构又不想定义类,右键类时js的 obj {a: 1, b: 2}
//例子一: 
return new {a = 1, b = 2};
//例子二:
List<Object> list = new List<Object>();
list.Add(new {a = 1, b = 2});
list.Add(new {a = 2, b = 5});
return list;
  • lock

    • lock的使用

      • 资料

      • 注意⚠️:Lock 锁定的对象,应该是【静态】的【只读】的【引用】类型(字符串除外)。

      • 如果使用了非static的变量,由于每次锁定的是不同的变量,所以和没有锁定一样。

      • lock 代码中可以使用return

  • asp.net 跨页面锁的使用

    • 注意⚠️: 此事例经过测试。

    • 测试代码位置: C:\公司\I_ing\git\bjhd2023\Web\test\CrossPageLock1_1.aspx、CrossPageLock1_2.aspx

    • A、定义一个含有锁变量的类,在App_Code目录下面

    • B、页面一使用

    • 页面二使用

# c#

- dynamic

```csharp
dynamic o = "a";
dynamic o1 = "a";
o == o1; //true  比较的是字符串的内容而不是引用
```

- record 的使用

```csharp
//record 的使用  
	public record Person(string FirstName, string LastName);
	Person person = new("Nancy", "Davolio");
```

- var 和 dynamic

```csharp
//var 在不好定义类型的情况下使用。
//dynamic 在不知道类型内容的情况下使用。 类是 json的对象。
//存储dynamic 数组,可以进行json序列化
List<dynamic> list = new List<dynamic>(); 
```

- linq

```csharp
from p in list
join emp in db_emp_list on p.UID equals emp.ID
join u in db_user_list on p.DoctorUserID equals u.ID into g
from u in g.DefaultIfEmpty()
select new { id = p.ID, name = emp.Name, dt = p.DT, doctorName = u == null ? "" : u.Name, outStorageUserID = p.OutStorageUserID };
//into g 是 LINQ 查询中的 分组连接(Group Join) 语法的一部分。它的作用是将连接操作的结果存储到一个临时分组变量 g 中。
//将 list 中的每个元素 p 与 db_user_list 中的元素 u 进行连接
//连接条件是 p.DoctorUserID 等于 u.ID
//连接结果不是直接展开,而是先分组放入临时变量 g 中
//from u in g.DefaultIfEmpty() 的作用
//从分组 g 中取出元素 u
//如果分组 g 中没有匹配的元素(即没有找到对应的 u),则使用 DefaultIfEmpty() 提供的默认值(对于引用类型是 null)
//这样就保证了即使右表 (db_user_list) 中没有匹配记录,左表 (list) 的记录仍然会出现在结果中
```

整个查询相当于 SQL 中的:

```sql
SELECT p.ID as id, emp.Name as name, p.DT as dt, 
       ISNULL(u.Name, '') as doctorName, p.OutStorageUserID
FROM list p
INNER JOIN db_emp_list emp ON p.UID = emp.ID
LEFT JOIN db_user_list u ON p.DoctorUserID = u.ID
```

- 读取 excel

```csharp
//读取 excel:
string path = Server.MapPath(System.IO.Path.Combine("Files", saveFileName));
using (var stream = new FileStream(path, FileMode.Open))
      {
          XSSFWorkbook xssWorkbook = new XSSFWorkbook(stream);
          sheet = xssWorkbook.GetSheetAt(0);
    var row = sheet.GetRow(rowNum);
    if (row == null) return string.Empty;
    var cell = row.GetCell(1);
          string v = cell == null ? string.Empty : cell.ToString();
}
```

- 匿名类

```csharp
//匿名类,临时使用的类。
//一般可以用在 后台调用函数返回前台的临时数据结构
//或者需要临时使用数据结构又不想定义类,右键类时js的 obj {a: 1, b: 2}
//例子一: 
return new {a = 1, b = 2};
//例子二:
List<Object> list = new List<Object>();
list.Add(new {a = 1, b = 2});
list.Add(new {a = 2, b = 5});
return list;
```

- lock
  - lock的使用
    - [资料](https://www.cnblogs.com/buzheng11/p/17661664.html)
    - 注意⚠️:Lock 锁定的对象,应该是【静态】的【只读】的【引用】类型(字符串除外)。
    - 如果使用了非static的变量,由于每次锁定的是不同的变量,所以和没有锁定一样。
    - lock 代码中可以使用return
- asp.net 跨页面锁的使用
  - 注意⚠️: 此事例经过测试。
  - 测试代码位置: C:\公司\I_ing\git\bjhd2023\Web\test\CrossPageLock1_1.aspx、CrossPageLock1_2.aspx
  - A、定义一个含有锁变量的类,在App_Code目录下面
  - B、页面一使用
  - 页面二使用