反射赋值
目前例子为NPOI Excel导入 入库时调用
var file = file1.PostedFile.InputStream; var fileExt = System.IO.Path.GetExtension(file1.FileName); IWorkbook workbook; if (fileExt == ".xlsx") workbook = new XSSFWorkbook(file); else workbook = new HSSFWorkbook(file); DB.DBContext db = new DB.DBContext(); List<DB.Entity.dt_orders> list_orders = new List<DB.Entity.dt_orders>(); #region 订单记录 var sheet_order = workbook.GetSheet("订单记录"); if (sheet_order != null) { List<string> list_hread = new List<string>(); //获取Excel的最大行数 int rowsCount = sheet_order.PhysicalNumberOfRows; int colsCount = sheet_order.GetRow(1).PhysicalNumberOfCells; //获取字段 for (int i = 0; i < colsCount; i++) { list_hread.Add(sheet_order.GetRow(1).GetCell(i).ToString()); } //数据填充 for (int x = 2; x < rowsCount; x++) { var model_order = new DB.Entity.dt_orders(); var row = sheet_order.GetRow(x); SetValue(model_order, row, list_hread); list_orders.Add(model_order); } //过滤掉已有的订单 var list_ordersno = list_orders.Select(d => d.order_no).ToList(); var dt_list_ordersno = db.dt_orders.Where(d => list_ordersno.Contains(d.order_no)).Select(d => d.order_no).ToList(); list_orders.RemoveAll(d => dt_list_ordersno.Contains(d.order_no)); } #endregion
/// <summary> /// 反射赋值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="model"></param> /// <param name="row"></param> /// <param name="list_hread"></param> private void SetValue<T>(T model, IRow row, List<string> list_hread) { System.Reflection.PropertyInfo[] myPropertyInfo = model.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); for (int i = 0; i < list_hread.Count; i++) { var hread = list_hread[i]; var pi = model.GetType().GetProperty(hread); try { var value = Convert.ChangeType((object)row.GetCell(i).ToString(), (Nullable.GetUnderlyingType(pi.PropertyType) ?? pi.PropertyType)); pi.SetValue(model, value, null); } catch (Exception ex) { pi.SetValue(model, null, null); } } }
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现