NetCore开发编程,基础实现
//-------------net 赋值处理 string json = JsonConvert.SerializeObject(list); //实体转为json string json = JsonConvert.SerializeObject(model);//实体转为json Task<Type> = JsonConvert.DeserializeObject<Type>(json);//json转为实体 string strArray = string.Join(",", _iType.GetTypeIds(id)); double[] arrData = new double[listData.Length]; arrData[ii] = value; int[] arrInt = new int[] { 0 }; IEnumerable<int> ids = arrInt; int[] ids = idsArray.SplitToInt32(); // var iSum = list.Where(aa => arrIds.Contains(aa.Id)).Sum(aa => aa.Value); var list = listData.Where(db => arrIds.Contains(db.Id)).ToList();//用于linq条件Contains // List<double> data = list.OrderBy(aa=>aa.Id).Select(aa => aa.Amount).ToList();//data.Reverse();//反序排列 List<JsonEtpData> list = listData.Select(gp => new CommonItem.JsonEtpData { id = gp.Id, name = gp.Name }).ToList(); //枚举 Type enumItem = (Type)Enum.Parse(typeof(Type), typeId.ToString());//字符串转为枚举类型 model.Type = enumItem; //Skip var timeData = listData.Skip(ii);//*sql语句中是按Hour正序排列,跳过序列中指定数量cout元素(跳过后之前就没有了),将剩下的序列返回来,然后获取第一项的值。 // @if (Model?.Any()==true) 有数据 @if (Model?.Any() != true) 无数据 #if DEBUG //测试时候用的 #endif int userId = _iHttpContextAccessor.HttpContext.User.GetUserId(); //请求api接口数据 var data = await _imClient.GetAsync<Apis.TypeResult>("typedata",a => a.Data("typeid", typeid).Data("status", status)); // string[] arrValues = list.Select(a => { string result = ""; string value = CommonMethod.GetValue(a.Value); if (value != "") result = value; else result = "0"; return result; }).ToArray();//数组值 //-------------net core 查询db[列表-linq] public IEnumerable<Type> LoadTypes(IEnumerable<int> arrIds) { var list = _type.AsQueryable().Where(aa => aa.TypeId.Included(arrIds)).AsEnumerable();//用于SQL语句Included return list; } public IEnumerable<Type> LoadTypes(IEnumerable<int> arrIds) { IEnumerable<int> arrUserIds = _user.AsQueryable().Select<User>(r => r.Id).AsEnumerable(reader => reader.GetInt32(0)); var list = listType.Where(aa => arrUserIds.Contains(aa.Id)).ToList(); //用于linq条件Contains return list; } public IEnumerable<Type> LoadTypes(string time) { createTime = Convert.ToDateTime(createTime).ToString("yyyy-MM-dd HH:mm:ss"); // MozNetcore.Data.IQueryable<Type> list = _type.AsQueryable(); list.Where($"Time>='{time}' and Time<='{time}'");//转换时间效率低convert(varchar,a.Time,120)='{time}' return list.AsEnumerable(); } public IEnumerable<Type> LoadTypes(int year, IEnumerable<int> areaIds) { MozNetcore.Data.IQueryable<Type> db = _type.AsQueryable(); db.Where(aa => aa.Name != null); db.Where(aa => aa.AreaId.Included(areaIds));//linq的条件in(1,2),生成sql语句 db.Where($"Id NOT IN(select Id from db_User where Status<>2")"); db.Select(aa => new { aa.Id, aa.Name }); return db.AsEnumerable(); } //-------------net core 查询db[列表-linq缓存] public async Task<IEnumerable<Type>> LoadMapAsync() { return await _cache.GetOrCreateAsync(typeof(Type), async data => { data.SetAbsoluteExpiration(TimeSpan.FromMinutes(3));//缓存的分钟 var list = await _type.LoadAsync(); return list; }); } //-------------net core 查询db[列表-SQL] public List<Type> GetList(int type) { List<Type> list = new List<Type>(); string sql = $@"select Id,Name from dt_Type where Type=@type"; using (DbDataReader sdr = _type.ExecuteReader(sql, new { Type = type }))) { while (sdr.Read())//循环每一行 { #region Type model = new Type(); model.Id = Convert.ToInt32(sdr["Id"].ToString()); model.Name = sdr["Name"].ToString(); list.Add(model); #endregion } } return list; } //-------------net core 查询db[列表-SQL缓存] public List<Type> LoadType(int type) { List<Type> list = new List<Type>(); string key = "Type"; return _cache.GetOrCreate(key, data => { data.SetAbsoluteExpiration(TimeSpan.FromMinutes(3));//缓存的分钟 string sql = $@"select Id,Name from dt_Type where Type=@type"; // using (DbDataReader sdr = _type.ExecuteReader(sql, new { Type = type }))) { while (sdr.Read())//循环每一行 { Type model = new Type(); model.Id = Convert.ToInt32(sdr["Id"].ToString()); model.Name = sdr["Name"].ToString(); list.Add(model); } } return list; }); } //-------------net core 查询db[分页-SQL] /// <summary> /// 查询分页数据(SQL) /// </summary> /// <param name="name">名称</param> /// <param name="type">分类</param> /// <param name="pageThis">当前第几页</param> /// <param name="pageSize">每页显示几条</param> /// <returns></returns> public List<Type> LoadQuery(int typeid, string name,int pageThis, int pageSize) { List<Type> list = new List<Type>(); // int startIndex = pageSize * (pageThis - 1) + 1;//20*(2-1)+1=21 int endIndex = pageSize * pageThis; //20*2=40 string sqlWhere = ""; // if (!string.IsNullOrEmpty(name)) { sqlWhere += " and m.name like'%" + name + "%'";//要防注入 } // using (DbDataReader sdr = _type.ExecuteReader("UP_TypeData", new { typeid = typeid, sqlWhere = sqlWhere, numStart = startIndex, numEnd = endIndex }, CommandType.StoredProcedure)) { while (sdr.Read())//循环每一行 { Type model = new Type(); model.Id = Convert.ToInt32(sdr["Id"]); model.Name = sdr["Name"].ToString(); list.Add(model); } } return list; } //-------------net core 查询db[实体] /// <summary> /// 查询实体 /// </summary> public Type GetType(int id) { Type model = new Type(); string sql = $@"select Id,Name from dt_Type where Id=@Id"; // using (DbDataReader sdr = _type.ExecuteReader(sql, new { Id = id }))) { if (sdr.Read())//读取一行 { model.Id = Convert.ToInt32(sdr["Id"]); model.Name = Convert.ToInt32(sdr["Name"]); return model; } } return null; } //-------------net core 查询db[字符] public string GetName(int id) { Dictionary<int,string> diyName = _cache.GetOrCreate("typenames", data => { data.SetAbsoluteExpiration(TimeSpan.FromMinutes(3)); // var arrData = _dbData.AsQueryable().Select(x => new { x.Id, x.Name }).AsEnumerable(reader => new { Id = reader.GetInt32(0), Name = reader.GetString(1) }); return arrData.ToDictionary(x => x.Id, x => x.Name); }); diyName.TryGetValue(id, out var name); return name; } public int GetValue(int begin,int end) { var value = 0; string sql = $@"SELECT sum(Value) from db_Type where Id>=@Begin and Id<@End"; value = await Database.ExecuteScalarAsync(sql,new { Begin = begin, End = end }); return value; } public string GetName(int id) { string sql = $@"select top 1 convert(varchar,a.HistTime,120) from db_Type where Id={id}"; var obj = Database.ExecuteScalar(sql); return Convert.ToString(obj); } //-------------net core 操作db[更新-linq] //object如下: object model = new { model.Name, model.Email, model.Phone, model.Date }; /// <summary> /// 更新特定列。 /// </summary> public DataResult Update(int id, object model) { var result = _dbData.Update(x => x.Id == id, model); return DataResult.FromResult(result, DataAction.Updated); } /// <summary> /// 更新特定列。 /// </summary> public async Task<DataResult> UpdateAsync(int id, object model) { var result = await _dbData.UpdateAsync(x => x.Id == id, model); return DataResult.FromResult(result, DataAction.Updated); } /// <summary> /// 更新特定列。 /// </summary> public async Task<DataResult> UpdateAsync(Type model) { bool result = true; result = await _dbData.UpdateAsync(a => a.Id == model.Id, new { model.Name, model.Memo }); if (result){} return DataResult.FromResult(result, DataAction.Updated); } /// <summary> /// 更新特定列。 /// </summary> public DataResult Update(int id, object model) { if (_dbData.Update(x => x.Id == id, model)) { _cache.Remove(CacheKey); //清除缓存 _cache.Remove(typeof(Type));//清除缓存 return DataAction.Updated; } return DataAction.UpdatedFailured; } //-------------net core 操作db[保存-linq] /// <summary> /// 添加验证更新。 /// </summary> public DataResult Save(Type model) { bool result; if (await _dbData.AnyAsync(x => x.Id == model.Id && x.UserId == model.UserId)) result = await _dbData.UpdateAsync(x => x.Id == model.Id && x.UserId == model.UserId, new { model.Type, model.Value }); else result = await _dbData.CreateAsync(source); return DataResult.FromResult(result, DataAction.Updated); } //-------------net core 操作db[增改-linq事务] /// <summary> /// 事务[删除,添加] /// </summary> public async Task<bool> GetDeleteMessageSend(int id) { return await _dbData.BeginTransactionAsync(async db => { bool result = false; //删除数据 bool bDelES = await db.As<Type>().DeleteAsync(aa => aa.Id == id);//**删除事务 if (bDelES == true) { Message add = new Message(); add.CreateTime = DateTime.Now; result = await db.As<Message>().CreateAsync(add); } // if (result) return true; return false; }); } //-------------net 组装 private string GetUrlDiy(string key, string value) //rTypeId,5 { // Dictionary<string, string> listDiy = new Dictionary<string, string>(); var queryPar = Request.Query; //rGroupId|1,rTypeId|1,page|3 foreach (var item in queryPar) { listDiy[item.Key] = item.Value;//rGroupId|1,rTypeId|1,page|3 } listDiy[key] = value; //rGroupId|1,rTypeId|5,page|3 IEnumerable<string> arrPar = listDiy.Select(x => $"{x.Key}={x.Value}");//rGroupId=1,rTypeId=5,page=3 string urlPar = string.Join("&", arrPar); //?rGroupId=1&rTypeId=5&page=3 return urlPar; } //-------------net 数组 /// <summary> /// 处理去重数组的值 /// </summary> public string[] GetArrDistinct(string[] arrValue) { ArrayList al = new ArrayList(); for (int i = 0; i < arrValue.Length; i++) { //判断是否已经存在 if (al.Contains(arrValue[i]) == false) al.Add(arrValue[i]); } //将arrayList转换成数组 arrValue = new String[al.Count]; arrValue = (string[])al.ToArray(typeof(string)); return arrValue; } /// <summary> /// 处理去重数组的值 /// </summary> public int[] GetArrDistinctInt(int[] arrValue) { ArrayList al = new ArrayList(); for (int i = 0; i < arrValue.Length; i++) { //判断是否已经存在 if (al.Contains(arrValue[i]) == false) al.Add(arrValue[i]); } //将arrayList转换成数组 arrValue = new int[al.Count]; arrValue = (int[])al.ToArray(typeof(int)); return arrValue; } //未到时间只刷新 DateTime dateTimeLast; DateTime dateTimeStart; public async Task<bool> GetDataSave(int id, List<Data> list) { int mis = 600;//10分钟(600秒) foreach (Data model in list) { //---1 //未到时间只刷新 //Time=c1.20171120145055<20171120145301,c2.20171120145302>20171120145301 if (dateTimeLast != null && model.Time < dateTimeLast.AddSeconds(mis)) { var result = false; if (model.Id > 0) result = await db.UpdateAsync(x => x.Id == model.Id, new { model.Value, model.Time }); continue; } //---2 //10分钟(600秒)后执行 //a1.20171120145001,a2.20171120145302 dateTimeStart = model.Time; await db.ExecuteNonQueryAsync("proc_Data", new { model.Id, model.Value, model.Time}, System.Data.CommandType.StoredProcedure); } // if (dateTimeLast == null || dateTimeLast != dateTimeStart) { dateTimeLast = dateTimeStart; //b1.20171120145001,a2.20171120145302 } return true; } /// <summary> /// 队列 先进先出集合 /// </summary> private readonly Queue<ValueTime> _queueTime = new Queue<ValueTime>(); public class ValueTime { public double Value { get; set; } public string Time { get; set; } } /// <summary> /// 队列 数据列表 /// </summary> public void GetQueueCache(List<Data> list) { double value = list.Sum(x => x.Value); string date = list.FirstOrDefault().Time.ToString("HH:mm:ss"); // Random random1 = new Random(); int rkey1 = random1.Next(0, 5); Random random2 = new Random(); int rkey2 = random2.Next(0, 9); value = value + Convert.ToDouble("0.0" + rkey1) + Convert.ToDouble("0.00" + rkey2); //加到队列add _queueTime.Enqueue(new ValueTime { Time = date, Value = value }); //达到数量移除开始第一个 if (_queueTime.Count > 1000) _queueTime.Dequeue(); } /// <summary> /// 队列 时间倒序列表 /// </summary> public List<ValueTime> GetQueueList() { return _queueTime.OrderByDescending(aa => aa.Time).ToList(); } //-------------net 其它 protected IActionResult GetFileDownLoad(string filePath, string fileNameEn, string fileNameCn, string fileExtend) { string downPath = Path.Combine(filePath + "\\", fileNameEn); Response.Headers.Add("Content-Disposition", "attachment;filename=" + fileNameEn); FileStream fileStream = new FileStream(downPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 65536, FileOptions.Asynchronous | FileOptions.SequentialScan); return File(fileStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileNameCn + fileExtend); } protected IActionResult GetFileDownLoad(string filePath, string fileNameEn, string fileNameCn, string fileExtend) { string downPath = Path.Combine(filePath + "\\", fileNameEn); Response.Headers.Add("Content-Disposition", "attachment;filename=" + fileNameEn); FileStream fileStream = new FileStream(downPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 65536, FileOptions.Asynchronous | FileOptions.SequentialScan); return File(fileStream, "application/pdf", fileNameCn + fileExtend); }