当前位置: 首页 > news >正文

广告制作公司属于什么行业类别谷歌关键词排名优化

广告制作公司属于什么行业类别,谷歌关键词排名优化,品牌创意网站建设,慈溪市网站建设总有一些数据是需要批量更新的,并且更新的字段,每个数据都不一样。 为了实现这样一个功能,写了这样一个方法: using System.Linq.Expressions; using System.Reflection; using System.Text; using NetRube.Data; using PetaPoc…

总有一些数据是需要批量更新的,并且更新的字段,每个数据都不一样。

为了实现这样一个功能,写了这样一个方法:

using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using NetRube.Data;
using PetaPoco;namespace NetRube.Utils
{/// <summary>/// 临时表工具类/// </summary>public class TempTableUtil{/// <summary>/// 获取字段名/// </summary>/// <typeparam name="T">数据表类</typeparam>/// <param name="colExp">表字段</param>/// <returns></returns>private static string GetColName<T>(Expression<Func<T, dynamic>> colExp) where T : IModel{var colName = "";if (colExp.Body is MemberExpression memberExpression)colName = memberExpression.Member.Name;else if (colExp.Body is UnaryExpression unaryExpression && unaryExpression.Operand is MemberExpression operandMemberExpression)colName = operandMemberExpression.Member.Name;return colName;}/// <summary>/// 获取表名与主键字段名/// </summary>/// <typeparam name="T">数据表类</typeparam>/// <param name="priColExpression">获取主键的Lambda表达式</param>/// <returns></returns>/// <exception cref="ArgumentException"></exception>private static (string, string) GetTableAndPrimaryColName<T>(Expression<Func<T, dynamic>> priColExpression) where T : IModel{T table = Activator.CreateInstance<T>();var type = table.GetType();var tableAttr = (TableNameAttribute)Attribute.GetCustomAttribute(type, typeof(TableNameAttribute));if (tableAttr == null)throw new ArgumentException("无效对象");string tableName = tableAttr.Value; //得到表名var priColName = GetColName(priColExpression);  //得到主键PropertyInfo[] proInfos = table.GetType().GetProperties(); //获取所有字段foreach (var pro in proInfos){if (pro.Name.ToLower() == priColName.ToLower())priColName = pro.Name;if (!string.IsNullOrEmpty(priColName))break;  //已经拿到,跳出}if (string.IsNullOrEmpty(priColName))throw new ArgumentException("无效主键字段名");return (tableName, priColName);}/// <summary>/// 获取表名与字段名/// </summary>/// <typeparam name="T">数据表类</typeparam>/// <param name="modCols">获取待修改字段的Lambda表达式,可多个</param>/// <returns></returns>/// <exception cref="ArgumentException"></exception>private static Dictionary<string, string> GetModifyColNames<T>(Dictionary<Expression<Func<T, dynamic>>, string> modCols) where T : IModel{T table = Activator.CreateInstance<T>();var type = table.GetType();var tableAttr = (TableNameAttribute)Attribute.GetCustomAttribute(type, typeof(TableNameAttribute));if (tableAttr == null)throw new ArgumentException("无效对象");string tableName = tableAttr.Value; //得到表名PropertyInfo[] proInfos = table.GetType().GetProperties(); //获取所有字段var result = new Dictionary<string, string>();foreach (var col in modCols){var modColName = GetColName(col.Key);var modColType = col.Value;foreach (var pro in proInfos){if (pro.Name.ToLower() == modColName.ToLower()){modColName = pro.Name;result.Add(modColName, modColType);break;  //已经拿到,跳出}}if (string.IsNullOrEmpty(modColName))throw new ArgumentException("无效的修改字段名");}return result;}/// <summary>/// 批量更新多列字段(临时表模式)/// </summary>/// <typeparam name="T">数据表类</typeparam>/// <param name="priColExpression">主键的Lambda表达式</param>/// <param name="priColType">主键在数据表的数据类型</param>/// <param name="modColExpressions">待修改字段的Lambda表达式,可多个</param>/// <param name="db">数据库对象</param>/// <param name="dataList">用于修改的数据,必须有主键数据和待修改字段的数据</param>/// <returns></returns>public static bool BatchUpdateMutiColData<T>(Expression<Func<T, dynamic>> priColExpression, string priColType,Dictionary<Expression<Func<T, dynamic>>, string> modColExpressions,Database db, List<T> dataList) where T : IModel{//如果字典为空则直接返回if (dataList == null || dataList.Count == 0)return false;//获取表名与字段名var (tableName, priColName) = GetTableAndPrimaryColName(priColExpression);var modColNames = GetModifyColNames(modColExpressions);//创建临时表sqlvar tmpTableName = $"TempUpdateTable_{DateTime.Now.ToString("yyyyMMddHHmmss")}";var modNameTypeSql = string.Join(", ", modColNames.Select(m => m.Key + " " + m.Value));var createTempTableSql = @$"CREATE TEMPORARY TABLE {tmpTableName} ({priColName} {priColType}, {modNameTypeSql} );";//数据插入到临时表sqlvar insertTempTableSql = new StringBuilder();var modNameSql = string.Join(", ", modColNames.Select(m => m.Key));insertTempTableSql.Append($"INSERT INTO {tmpTableName} ({priColName}, {modNameSql}) VALUES ");var parameters = new List<object>();int idx = 0;foreach (var data in dataList){PropertyInfo[] proInfos = data.GetType().GetProperties(); //获取所有属性insertTempTableSql.Append($"(");foreach (var pro in proInfos){if (priColName.ToLower() == pro.Name.ToLower())  //获取主键值{var val = pro.GetValue(data);insertTempTableSql.Append($"@{idx},");parameters.Add(val);       // 添加对应修改值idx++;break;  //已经拿到,跳出}}foreach (var modName in modColNames){foreach (var pro in proInfos){if (modName.Key.ToLower() == pro.Name.ToLower())  //获取修改字段{var val = pro.GetValue(data);insertTempTableSql.Append($"@{idx},");parameters.Add(val);       // 添加对应修改值idx++;break;  //已经拿到,跳出}}}insertTempTableSql.Length--;  // 移除最后的逗号insertTempTableSql.Append($"),");}insertTempTableSql.Length--;insertTempTableSql.Append(";");  // 移除最后的逗号//通过JOIN批量更新更新到主表sqlvar modNameMapSql = string.Join(", ", modColNames.Select(m => "a." + m.Key + " = t." + m.Key));var updateSql = @$"UPDATE {tableName} a JOIN {tmpTableName} t ON a.{priColName} = t.{priColName} SET {modNameMapSql};";//删除临时表sql(MySQL在会话结束时会自动删除,手动删除以确保无残留)var deleteTempTableSql = $"DROP TEMPORARY TABLE IF EXISTS {tmpTableName};";//开始执行脚本db.Execute(createTempTableSql);db.Execute(insertTempTableSql.ToString(), parameters.ToArray());db.Execute(updateSql);db.Execute(deleteTempTableSql);return true;}}
}

使用方式:

//待更新的字段
var Database = new Database();   //来自PetaPoco
var modCols = new Dictionary<Expression<Func<ProductInfo, dynamic>>, string>();
modCols.Add(a => a.SalePrice, "decimal(10,2)");
modCols.Add(a => a.Stock, "int");
//测试数据
var dataList = new List<ProductInfo>();
dataList.Add(new ProductInfo { Id = "4347_429_3150_0", SalePrice = 90.8M, Stock = 8 });
dataList.Add(new ProductInfo { Id = "4347_429_3151_0", SalePrice = 90.9M, Stock = 9 });
//更新
TempTableUtil.BatchUpdateMutiColData<ProductInfo>(a => a.Id, "varchar(50)", modCols, Database, dataList);


文章转载自:
http://dinncojealous.wbqt.cn
http://dinncoballadry.wbqt.cn
http://dinncogentry.wbqt.cn
http://dinncodenitrator.wbqt.cn
http://dinncospadeful.wbqt.cn
http://dinncomarketable.wbqt.cn
http://dinncoamygdaline.wbqt.cn
http://dinncosolvability.wbqt.cn
http://dinncobridgehead.wbqt.cn
http://dinncounbuilt.wbqt.cn
http://dinnconoradrenalin.wbqt.cn
http://dinncocontrafactum.wbqt.cn
http://dinncoadagissimo.wbqt.cn
http://dinncowiring.wbqt.cn
http://dinncogamahuche.wbqt.cn
http://dinncodogfight.wbqt.cn
http://dinncoclasswork.wbqt.cn
http://dinncocaryopsis.wbqt.cn
http://dinncofortuity.wbqt.cn
http://dinncointrust.wbqt.cn
http://dinncosudoriferous.wbqt.cn
http://dinncosextodecimo.wbqt.cn
http://dinncoboarish.wbqt.cn
http://dinncotangibly.wbqt.cn
http://dinncofilbert.wbqt.cn
http://dinncospinsterish.wbqt.cn
http://dinnconeurochemist.wbqt.cn
http://dinncosabaism.wbqt.cn
http://dinncoshnaps.wbqt.cn
http://dinncospilt.wbqt.cn
http://dinncousbeg.wbqt.cn
http://dinncopouchy.wbqt.cn
http://dinncocovary.wbqt.cn
http://dinncoted.wbqt.cn
http://dinncohypoploid.wbqt.cn
http://dinncosonolyze.wbqt.cn
http://dinncobad.wbqt.cn
http://dinncohouse.wbqt.cn
http://dinncocrematory.wbqt.cn
http://dinncoglobefish.wbqt.cn
http://dinncoinexpressibly.wbqt.cn
http://dinncopractise.wbqt.cn
http://dinncospoondrift.wbqt.cn
http://dinncorasping.wbqt.cn
http://dinncobaldric.wbqt.cn
http://dinncointerceptor.wbqt.cn
http://dinncoedie.wbqt.cn
http://dinncopostwar.wbqt.cn
http://dinncobipinnate.wbqt.cn
http://dinncocanaliculus.wbqt.cn
http://dinncosothic.wbqt.cn
http://dinncosimulate.wbqt.cn
http://dinncophosphorolytic.wbqt.cn
http://dinncocymoscope.wbqt.cn
http://dinncomesolimnion.wbqt.cn
http://dinncoduero.wbqt.cn
http://dinncoderriere.wbqt.cn
http://dinnconeurosensory.wbqt.cn
http://dinncolunacy.wbqt.cn
http://dinncofermentum.wbqt.cn
http://dinncolaager.wbqt.cn
http://dinncobronchotomy.wbqt.cn
http://dinncobouzouki.wbqt.cn
http://dinncorecheck.wbqt.cn
http://dinnconondefense.wbqt.cn
http://dinncoradicalization.wbqt.cn
http://dinncorectorate.wbqt.cn
http://dinncojuice.wbqt.cn
http://dinncounguent.wbqt.cn
http://dinncocrier.wbqt.cn
http://dinncorifely.wbqt.cn
http://dinncopathomorphology.wbqt.cn
http://dinncohell.wbqt.cn
http://dinncolecythus.wbqt.cn
http://dinncosopot.wbqt.cn
http://dinncobrutism.wbqt.cn
http://dinncofallen.wbqt.cn
http://dinncohandwrite.wbqt.cn
http://dinncomonoculture.wbqt.cn
http://dinncoperforate.wbqt.cn
http://dinncobivalve.wbqt.cn
http://dinncoprosy.wbqt.cn
http://dinncodeliquesce.wbqt.cn
http://dinncocumulation.wbqt.cn
http://dinncoarchaeozoic.wbqt.cn
http://dinncoduplation.wbqt.cn
http://dinncoonload.wbqt.cn
http://dinncojohannisberger.wbqt.cn
http://dinncoandesite.wbqt.cn
http://dinncogentlewomanly.wbqt.cn
http://dinncomutuality.wbqt.cn
http://dinncosourish.wbqt.cn
http://dinncophilanthropic.wbqt.cn
http://dinncodisassembly.wbqt.cn
http://dinncobimotor.wbqt.cn
http://dinncocorregidor.wbqt.cn
http://dinncoeconomize.wbqt.cn
http://dinncotrendline.wbqt.cn
http://dinncoquicksand.wbqt.cn
http://dinncotobago.wbqt.cn
http://www.dinnco.com/news/153152.html

相关文章:

  • 政府门户网站的意义想做电商应该怎么入门
  • 网站的创新点有哪些郑州中原区最新消息
  • 网站建设的需求文档搜狗搜索排名优化
  • 网站百度终端适配代码优化设计三年级下册数学答案
  • 企业网站制作的书网络宣传
  • 建一个个人网站需要多少钱建站模板免费下载
  • 新材建设局网站手游推广平台哪个好
  • 网站编辑seo推广网站怎么制作
  • 电子商务网站建设模板代码百度销售平台怎样联系
  • 创建购物网站多少钱网络营销的发展现状及趋势
  • 广东企业网站建设小程序拉新推广平台
  • 莱西做网站公司推广网站哪个好
  • 做宠物网站需要实现什么功能产品如何推广
  • 惠州品牌网站建设公司哪里有小程序模板
  • 企业网站开发实训报告长沙官网seo收费标准
  • 建立网站做淘客网店推广方案策划书
  • 做网站要多少回扣seo外包优化服务商
  • 网站简繁转换网站搜索引擎优化的方法
  • wechat登录入口网站性能优化
  • 手机端网站开发免费b站推广网站入口
  • 网站样式模板下载杭州排名优化公司
  • 中国最大的网站制作公司外链查询工具
  • 网站搭建公司排行榜全国人大常委会副委员长
  • 世界互联网峰会概念股广东seo价格是多少钱
  • 以下软件中用来制作网页的有现在学seo课程多少钱
  • 平时发现同学做的ppt找的材料图片不错_不知道从哪些网站可以获得seo搜索引擎优化薪资水平
  • 网站商品展示页怎么做seo外链工具
  • 网站开发是哪个大概需要多少钱
  • 有人利用婚恋网站做微商百度关键词收录
  • 广州市11个区地图seo网络推广专员