C# ef框架的那些事 2021-08-04 C# 暂无评论 ## 安装EF框架 主要是版本要对应上 1. mysql-for-visualstudio-1.2.9.msi 2. mysql-connector-net-8.0.26.msi 3. 微软的ef框架 4. mysql.data 5. mysql.data.entityframework > 这几个装好就能用了2和5的版本要对上 ## 增删查改 1. 增 ```c# Model.Add(表对象); Model.SaveChanges(); ``` 2. 删 ```c# Model.Remove(表对象);//对象中需要包含主键 Model.SaveChanges(); ``` 3. 改 ```c# var selectItem = Model.表对象.FirstOrDefault(o => o.对象属性 == 条件值); select.表属性=修改后的值; Model.SaveChanges(); ``` 4. 查 > 查有很多中方法 where() Selecte()结合lambda表达式来用 ## 分页 分页一般是点击了当前页数才加载当前的数据,关键点有 1. 一页显示多少个 2. 数据的总数 3. 显示的页数(一般是自动算出来的) ```c# var data = hgqModel.d_it_base_info.Select(o => o).OrderBy(o => o.createDate).Skip(pageinde*count).Take(count).ToList(); ``` > 1. 在使用`Skip()`之前需要先排序这里用的OrderBy() 2. `Skip()`指的是跳过多少个, 公式是 (当前页-1)*一页可以显示的总数 3. `Take()`指的是获取多少个数据 一般就是一页显示的个数 ## 子表查询 > 背景:有两个表a和b,想要查询a表中某个字段和b某个字段相同的记录 tip:要查的是a表的记录,b字段是条件 ```C# nzsc_hgq_2021Entities2 a = new nzsc_hgq_2021Entities2(); var b = a.d_it_base_info.Where( o => o.barCode != o.d_it_detect.FirstOrDefault(x => x.barCode == o.barCode).barCode ).ToList(); ``` ##不关联表查询 > 上面子查询是两个表之间存在外键的情况,但是还有一种情况,两个表不关联,改怎么办呢? ``` c# var total =ef.tab1.Select(o=>o).toList();//总数 var used ef.tab2.Select(o=>o).toList();//已经使用的 return total.Where(o => !used.Exists(t => o.总数的字段.Equals(t.已用的字段))).ToList(); //方法1 可行 return markers.Where(a => maps.Where(t => a.latitude == t.lat).Any()).ToList(); // 方法2 没试 return markers.Where(a => !maps.Where(t => a.latitude == t.lat).Any()).ToList(); //取交集数据,加 '!' 没试 ``` ## 坑坑 1. 加载方式 - ef框架好像有好多中加载方式,定义的实体对象好像不会实施更新,所以每次用到的时候我都会直接再new一个实体
Linux新指令get👍 2021-08-03 Linux 暂无评论 ## 查询文件夹总大小 ``` shell root@OpenWrtForN1:~# du -sh /mnt/mmcblk2p4 1.8G /mnt/mmcblk2p4 ``` > `du` 查询文件夹大小 `-s`可以显示当前文件夹的大小(字节) `-h`可以把字节转换成M,K,G 有时候需要 查看占用,这个指令会很方便 *2021-8-3* ## scp 命令 > 两台Linux之间怎么传输文件😲😲😲 1. 本机往远程复制文件 - `scp [-P 端口{大写大写}] [-r {递归传递文件夹}] [-C {允许压缩}] 本机文件名 用户名@ip地址:远端路径/[这里可以修改文件名 不写则不修改文件名]` 1. 从远程复制文件到本地 - `scp [-P 端口{大写大写}] [-r {递归传递文件夹}] [-C {允许压缩}] 用户名@ip地址:远端路径或者文件名 本机文件名` ## du 命令 2022-02-17 (果然还是忘记了\~\~\~💀💀💀) >显示文件夹的大小 每次用到都要百度,给老子记住!记住!!🤪🤪🤪 1. 展示文件夹的大小 `du -sh /mnt/mmcblk2p4/docker/*` 这个**\***号要带着,不然只会展示当前文件夹的大小 切记哈 *2022-02-17*
c#异步操作 2021-08-02 C# 暂无评论 ### async和await > 意思就是,在方法名那里加上async修饰,再定义Task.Run(匿名函数),里面可以加上返回值。 需要里面数值的时候,在赋值那里用await修饰。不会造成ui线程阻塞 ``` c# private async void rdbtnPt_CheckedChanged(object sender, EventArgs e) { //异步获取数据 避免ui阻塞 var thread = Task.Run(() => { nzsc_hgq_2021Entities2 hgqDatatable = new nzsc_hgq_2021Entities2(); //查询字典表里面的所有数据 return hgqDatatable.pt_err_limit.Select(o => o).ToList(); }); List allPtErr = await thread; } ``` > Task.Factory.StartNew(); 也是开一个新的线程,但是,他是立即执行的,而上面那个有点像把方法保存起来,需要用的时候加上await就行了。 ***2022-03-07 Task的一些用法*** > 新姿势🤷♂️🤷♂️🤷♂️ Task自带了一些管理线程的方法 1. `WhenAll(Task[])`等待列表中所有的线程执行完毕,可以配合 await 返回的是T类型的数组, >顺便提一下,这个await是异步的线程,他不会阻塞主线程,但是他会阻塞它所在的线程 ``` c# var a = await Task.WhenAll(alltas); foreach (var o in a) { var aa = o as Dictionary; FileStream file = File.Create(Environment.CurrentDirectory + "/" + aa.Keys.ToArray()[0]); file.Write(aa.Values.ToArray()[0], 0, aa.Values.ToArray()[0].Length); file.Close(); } ``` 上面这个代码await这段代码会阻塞,不会立即执行foreach,但是不会阻塞UI线程,`你懂我意思吧.jpg👀` 2. `WhenAny(Task[])` 等待Task数组中最先完成的task对象。状态为`RanToCompletion`已经成功执行,通过这个对象可以直接获取到Result,就不需要再阻塞了。但是其他任务好像还会继续执行 3. `WaitAll和WaitAny`就是字面意思,不过返回的不是task对象而是数组的索引,感觉用到的地方很少,而且他会让线程里的Invoke语句阻塞,不知道为啥,用When*就没啥问题.
md(markdown)基本语法。 2020-11-09 学习 暂无评论 #1.字体 ``` *斜体* ***斜体加粗*** ~~删除线~~ ``` >渲染效果如下: *斜体* ***斜体加粗*** ~~删除线~~ #2.标题 ``` #一级标题 ##二级标题 ###三级标题 ####四级标题 #####五级标题 ######六级 ``` >渲染效果如下 #一级标题 ##二级标题 ###三级标题 ####四级标题 #####五级标题 ######六级 #3.引用 ``` 语法: >一级引用 >>引用嵌套 >>底下所有的内容都在对下一层中 >> >>>持续套娃 ``` >渲染效果如下: --------- >一级引用 >>引用嵌套 >>底下所有的内容都在对下一层中 >> >>>持续套娃 #4.分割线 ``` 语法: --- ---- **** *** ``` >渲染效果如下: --- ---- **** *** 上面是分割线有两种方式 #5.超链接 ``` [标题]("")  ``` >渲染效果如下: [图片](https://raw.githubusercontent.com/c2z1314/pic/master/picGo/IMG_2645.jpg)  #6.列表 ##6.1无序列表 ``` - 列表 - + 列表 + * 列表 * 符号和内容之间有一个空格 ``` >渲染效果如下: - 列表 - + 列表 + * 列表 * ##6.2有序列表 ``` 1. 列表1 2. 列表2 3. 列表3 和无序列表一样也要有空格 ``` >渲染效果如下 1. 列表1 2. 列表2 3. 列表3 ##6.3列表嵌套 ``` - 无序列表一嵌套1 - 无序列表一嵌套2 - 无序列表一嵌套3 上一级和下一级之间敲三个空格,或者一个tab按键 ``` >渲染效果如下: - 无序列表一嵌套1 - 无序列表一嵌套2 - 无序列表一嵌套3 #7.表格 ``` 姓名|技能|排行 --|:--:|--: 刘备|哭|大哥 关羽|打|二哥 张飞|骂|三弟 ``` >渲染效果如下: 姓名|技能|排行 --|:--:|--: 刘备|哭|大哥 关羽|打|二哥 张飞|骂|三弟 #8.代码 如果是某串`代码`的话就用反引号括起来 ```csharp //代码块的话就用三个反引号包含 public static void test(){ console.writeLine("123"); } ``` #9.流程图 ```flow stt=>start: 开始 op=>operation: My Operation cond=>condition: Yes or No? e=>end stt->op->cond cond(yes)->e cond(no)->op ``` 啊这?看不懂。 啊这?看不懂。