一、FreeSQL
1、单表查询返回指定字段
_freeSql.Select<User>().Where(a => a.cId != AspNetUser.UserId).ToList(a => new { a.cId, a.cName });
2、IF条件判断查询
_freeSql.Select<Region>().WhereIf(grade != 1, a => a.cParentId == cRegionCode).ToListAsync();
3、IF条件模糊查询
_freeSql.Select<Region>().WhereIf(!queryParam["name"].IsEmpty(),a => a.cRegionCode.Contains(queryParam["code"].ToString()))
4、分页及多表查询
var aa = _freeSql.Select<tb_eqadapp, DataItem, DataItem>()
.LeftJoin(x => x.t1.cAddressID == x.t2.cId)
.LeftJoin(x => x.t1.cSBID == x.t3.cId)
.OrderByDescending(x => x.t1.cCreateTime)
.Count(out var total) //总记录数量
.Page(page.pageIndex, page.pageSize)
.ToList((a, b, c) => new
{
a.cId,
a.cPosition,
a.cAddressID,
a.cUnitName,
a.cPhone,
a.cState,
a.cCreateTime,
b.cItemName,
CSBName = c.cItemName
});
5、分组汇总查询
//分组查询应用类型以及总数
var yylx = _freeSql.Select<tb_appinfo, DataItem>()
.LeftJoin(a => a.t1.cChannelType == a.t2.cId)
.Where(a => a.t1.cUserID == AspNetUser.UserId)
.GroupBy(a => a.t2.cItemName)
.Having(x => x.Count() > 1)//显示大于0的数据
.ToList((a) => new
{
yymc = a.Key,//应用名称
yynum = a.Count()//应用总数
});
二、Layui常用代码
//子页面提示结束后关闭弹窗并刷新父页面的Table数据
parent.layer.msg('成功通过!', { icon: 1, time: 1200 }, function () {
var index = parent.layer.getFrameIndex(window.name); //获取当前窗口的name
parent.layer.close(index);//关闭窗口
parent.layui.table.reload("user-manage");//刷新父页面的Table,user-manage:父页面Table的ID
});
**************************************分割线********************************************
//弹窗
layer.open({
type: 2,
title: '添加考试成员',
content: 'SJCYAdd.html?id=' + selectRow.cid,
maxmin: true,
area: ['90%', '90%'],
btn: ['关闭'],
success: function () { },
yes: function (index, layero) {//关闭的回调
table.reload(areaName);
layer.close(index);
},
cancel: function (index, layero) {//弹窗右上角关闭按钮的回调
table.reload(areaName);
layer.close(index);
}
});
**************************************分割线********************************************
//防止按钮重复点击
var that = this.yes.arguments[1];
that.find('a.layui-layer-btn0').css("pointer-events", "none");//防止按钮重复点击
// setTimeout(() => { that.find('a.layui-layer-btn0').css("pointer-events", "") }, 2000)//2秒后恢复点击
$('#form-submit').css("pointer-events", "none");//防止按钮重复点击
setTimeout(() => { $('#form-submit').css("pointer-events", "") }, 2000)//两秒后启用
**************************************分割线********************************************
//Layui 开关按钮显示是否确定提示框
<input type="checkbox" checked="" name="codeSwitch" lay-skin="switch" id="open" lay-filter="switchTest" lay-text="启用|已禁用">
//监听提交
form.on('switch(switchTest)', function (data) {
console.log(data.elem); //得到checkbox原始DOM对象
console.log(data.elem.checked); //开关是否开启,true或者false
console.log(data.value); //开关value值,也可以通过data.elem.value得到
console.log(data.othis); //得到美化后的DOM对象
var txt = "";
if (data.elem.checked) {
txt = "确定需要启用吗?";
}
else {
txt = "确定需要停用吗?";
}
var x = data.elem.checked;
layer.open({
content: txt
, btn: ['确定', '取消']
, yes: function (index, layero) {
data.elem.checked = x;
form.render();
layer.close(index);
//按钮【按钮一】的回调
}
, btn2: function (index, layero) {
//按钮【按钮二】的回调
data.elem.checked = !x;
form.render();
layer.close(index);
//return false 开启该代码可禁止点击该按钮关闭
}
, cancel: function () {
//右上角关闭回调
data.elem.checked = !x;
form.render();
//return false 开启该代码可禁止点击该按钮关闭
}
});
return false;
});
**************************************分割线********************************************
//Table操作列气泡文字显示
操作列按钮:
<button lay-tips="数据编辑" class="pear-btn pear-btn-primary pear-btn-sm x-edit" lay-active="x-edit" style="margin-right:5px"><i class="layui-icon layui-icon-edit "></i></button>
//用户管理
table.render({
cols: [[
{ title: '操作', width: 200, align: 'center', fixed: 'right', templet: () => $.userbutton() }
]],
done() {
//Tips
$('*[lay-tips]').on('mouseenter', function () {
var content = $(this).attr('lay-tips');
this.index = layer.tips('<div style="padding: 5px; font-size: 14px; color: #eee;">' + content + '</div>', this, {
time: -1
, maxWidth: 280
, tips: [1, '#3A3D49']
});
}).on('mouseleave', function () {
layer.close(this.index);
});
}
});
**************************************分割线********************************************
//获取上级页面的元素
var i = parent.document.getElementById("layui-badge-dot");
Table控制操作列按钮的显示与隐藏
Table操作列气泡文字显示
三、C#常用代码
//Json字符串序列化
JObject user = (JObject)JsonConvert.DeserializeObject(Json字符串);
//Json字符串转实体类
T mod=(T)JsonConvert.DeserializeObject(json, typeof(T))
//分组查询输出指定字段
var objb = obja.GroupBy(a => a.cType).Select(a => a.Key).ToArray();
//.NetCore API图片上传功能
[HttpPost, AllowAnonymous]
public object WeditorUpload()
{
IFormFileCollection files = Request.Form.Files;
var baseDirec = Directory.GetCurrentDirectory() + "/wwwroot/UpLoadFile/"; // 根目录
var file = files[0];
//获取文件名后缀
string extName = Path.GetExtension(file.FileName).ToLower();
//获取保存目录的物理路径
if (System.IO.Directory.Exists(baseDirec) == false)//如果不存在就创建images文件夹
{
System.IO.Directory.CreateDirectory(baseDirec);
}
string fileNewName = Guid.NewGuid().ToString();
string ImageUrl = baseDirec + fileNewName + extName;
//SaveAs将文件保存到指定文件夹中
using (var stream = new FileStream(ImageUrl, FileMode.Create))
{
file.CopyToAsync(stream);
}
return new { errno = 0, data = new { url = "http://localhost:5258/UpLoadFile/" + fileNewName + extName, alt = "", href = "" } };
}
**************************************分割线********************************************
private readonly IServiceScopeFactory _scopeFactory;
using var scope = _scopeFactory.CreateScope();
var scopedService = scope.ServiceProvider.GetRequiredService<IDeviceManageService>();//实现自定义某接口
var objlist = scopedService.GetHomeData();//调用自定义接口内的某方法
**************************************分割线********************************************
获取查询条件的索引值
var query3 = elementsas.Select((m, ssssa) => new { value = m.Name, index = ssssa }).Where(m => m.value.Contains("微信号")).Select(m => m.index + 1).ToList();
**************************************分割线********************************************
Json序列号处理时间带T的问题
IsoDateTimeConverter timeConverter = new IsoDateTimeConverter()
{
DateTimeFormat = "yyyy-MM-dd HH:mm:ss"
};
return JsonConvert.SerializeObject(数据源, Formatting.Indented, timeConverter);
**************************************分割线********************************************
读取配置文件
public IConfiguration _configuration { get; set; }
public SendNewsService(IBaseRepository baseRepository, IConfiguration configuration) : base(baseRepository)
{
_configuration = configuration;
}
使用
var url = _configuration["ConnectionStrings:Email"];
var url2 = _configuration.GetValue<string>("ConnectionStrings:Email");
var url3 = _configuration.GetSection("ConnectionStrings").GetSection("Email").Value;
**************************************分割线********************************************
两个实体类合并
JObject o1 = JObject.Parse(JsonConvert.SerializeObject(tab[0]));
JObject o2 = JObject.Parse(JsonConvert.SerializeObject(newM));
o1.Merge(o2, new JsonMergeSettings
{
MergeArrayHandling = MergeArrayHandling.Union
});
M_YL_FZHF_Master entity = JsonConvert.DeserializeObject<M_YL_FZHF_Master>(o1.ToString());
接口实现方法
四、JQ常用代码
var json = $.grep(json数据, function (e) {
return e.字段 != 需要删除的数据
});
//根据条件进行精确查询
var json = json数据源.filter(function (e) {
return e.字段==需要查询的数据
})
//Ajax请求post接口并发送FromBody对象
let formData = new FormData();
formData.append("csjmc", $("#sjmc").val());
$.ajax({
type: 'post',
data: formData,
dataType: 'json',
async: false,//同步
contentType: false,
processData: false,
url: "/api/sj/Edit",
success: function (r) {
if (r.code == 200) {
}
}
});
//读取某个标签下的所有Img标签的src值
$.each($('#idno').find('img'), function (index, img) {
var oldSrc = $(this).attr('src');
})
五、SQL常用代码
--跨数据查询添加SQL脚本
INSERT INTO db_layui.dbo.tb_apiinputparam(cId,cKey,cName,cType,cNotes,cAPIId,cMust)
select * from db_devicedonitor.dbo.tb_apiinputparam where cAPIId='c676c51a-2bc9-49e3-80be-07b6b67c6d19'
-------------------------------------------分割线------------------------------------
--通过分组方式去除重复行,得到想要数据导出到临时表
SELECT 字段列表 INTO #临时表名 FROM 表名 GROUP BY 字段列表
--在备份表中导入需要的数据
INSERT INTO 表名 SELECT * FROM #临时表名
--删除临时表
DROP TABLE #临时表名
-------------------------------------------分割线------------------------------------
–SQL Server 2008R2 收缩日志
----------改变数据库模式(简单)
alter database 数据库 set recovery simple
DBCC SHRINKFILE (N'数据库_log' , 1) --将日志文件改为1M
----------恢复数据库模式(完整)
alter database 数据库 set recovery full
-------------------------------------------分割线------------------------------------
六、Linux常用脚本
cd .. 返回上级目录
Nginx:
cd /usr/local/nginx 进入Nginx目录
cd /usr/local/nginx/sbin 进入Nginx启动目录
cd /usr/local/nginx/conf 进入Nginx配置目录
cd /usr/local/nginx/html Nginx html站点目录
./nginx -s reload 重启加载
./nginx 启动
防火墙:
firewall-cmd --state 查看防火墙状态
firewall-cmd --list-ports 查看开放的端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent 开启防火墙端口
firewall-cmd --zone=public --remove-port=9200/tcp --permanent 关闭防火墙端口
systemctl start firewalld 启动防火墙
systemctl stop firewalld 关闭防火墙
注意:添加端口后,必须用命令firewall-cmd --reload重新加载一遍才会生效
操作文件:
rm -rf 文件名 删除文件
unzip -d 文件名.zip 将压缩文件解压至当前路径 注意:使用解压命令时,需要与压缩文件处于同级目录下
unzip -d 目录路径 文件名.zip 将压缩文件解压至指定路径
mv 文件名 目标文件夹路径 文件移动
rm -f * 删除文件夹下所有文件
不覆盖解压 unzip -n、覆盖解压 unzip -o 用法与解压命令一致
.NetCoreAPI启动命令
nohup dotnet xxxx.dll &
七、Winform常用代码
//解决父窗体MDI子窗体显示时,被父窗体的控件遮住
/// <summary>
/// 解决MDI子窗体被父窗体控件遮住
/// </summary>
/// <param name="hWndChild"></param>
/// <param name="hWndNewParent"></param>
/// <returns></returns>
[DllImport("user32")]
public static extern int SetParent(int hWndChild, int hWndNewParent);
//使用方法
ShowLoad s = new ShowLoad();
s.MdiParent = this;
s.Show();
SetParent((int)s.Handle, (int)this.Handle);
----------------------分割线-------------------------------------
//修改MDI背景色
private System.Windows.Forms.MdiClient m_MdiClient;
public Main()
{
InitializeComponent();
int iCnt = this.Controls.Count;
for (int i = 0; i < iCnt; i++)
{
if (this.Controls[i].GetType().ToString() == "System.Windows.Forms.MdiClient")
{
this.m_MdiClient = (System.Windows.Forms.MdiClient)this.Controls[i];
break;
}
}
this.m_MdiClient.BackColor = System.Drawing.Color.Black;
}