Enumerable转换为DataTable

本文提供了一个简化的方法,用于将Enumerable类型转换为DataTable,适用于项目组公共类库中,通过使用泛型和反射技术,实现了高效的数据转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在项目组公共类库中发现一个 Enumerable类型转换为DataTable,写的挺精简的,拿出来跟大家共享一下。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Data;
 6 using System.Reflection;
 7 namespace H3C.RD.IPDPlan.Common
 8 {
 9     public static class EnumerableConverterExtension
10     {
11         /// <summary>
12         /// 转换为一个DataTable
13         /// </summary>
14         /// <typeparam name="TResult"></typeparam>
15         /// <param name="value"></param>
16         /// <returns></returns>
17         public static DataTable ToDataTable<TResult>(this IEnumerable<TResult> value) where TResult : class
18         {
19             return value.ToDataTable(Utility.DateTimeFormat.DATETIME_FORMAT_YYYY_MM_DD);
20         }
21         /// <summary>
22         /// 转换为一个DataTable
23         /// </summary>
24         /// <typeparam name="TResult"></typeparam>
25         /// <param name="value"></param>
26         /// <returns></returns>
27         public static DataTable ToDataTable<TResult>(this IEnumerable<TResult> value,string format) where TResult : class
28         {
29             if (string.IsNullOrEmpty(format))
30             {
31                 format = Utility.DateTimeFormat.DATETIME_FORMAT_YYYY_MM_DD;
32             }
33             //创建属性的集合
34             List<PropertyInfo> pList = new List<PropertyInfo>();
35             //获得反射的入口
36             Type type = typeof(TResult);
37            
38             DataTable dt = new DataTable();
39             //把所有的public属性加入到集合 并添加DataTable的列
40             Array.ForEach<PropertyInfo>(type.GetProperties(), p =>
41             {
42                 pList.Add(p);
43                 if (p.PropertyType.IsGenericType)
44                 {
45                     dt.Columns.Add(p.Name);
46                 }
47                 else
48                 {
49                     dt.Columns.Add(p.Name, p.PropertyType);
50                 }
51             });
52             if (null != value)
53             {
54                 foreach (var item in value)
55                 {
56                     //创建一个DataRow实例
57                     DataRow row = dt.NewRow();
58                     //给row 赋值
59                     pList.ForEach(p => row[p.Name] = (p.GetValue(item, null) is DateTime) ? Utility.FormatDateTime(p.GetValue(item, null), format) : p.GetValue(item, null));
60                     //加入到DataTable
61                     dt.Rows.Add(row);
62                 }
63             }
64             return dt;
65         }
66     }
67 }

 

转载于:https://www.cnblogs.com/lc-chenlong/p/3142892.html

public void CreateFileAndUpload(JObject requestJson, bool isUploadFile) { try { string uploadFilePath = ""; // 生成上传结果文件 CreateUploadFileInfo(requestJson, out uploadFilePath); if (!isUploadFile) { return; } if (uploadFilePath.Trim() == string.Empty) { log.Error(string.Format("uploadFilePath is emmpty")); return; } // 执行上传 DirectoryInfo dir = new DirectoryInfo(uploadFilePath); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //获取目录下(不包含子目录)的文件和子目录 string uploadResult = ""; string csvPath = ""; string[] zipPath = new string[] { }; List<DataTable> csvTable = Enumerable.Repeat<DataTable>(null, 4).ToList(); foreach (FileSystemInfo file in fileinfo) { if (file is DirectoryInfo) //判断是否文件夹 { continue; } // 是文件执行上传 string fullPath = file.FullName; if (file.FullName.Contains(".qdf.csv")) { csvTable[0]= (ConvertCsvToDataTable(fullPath)); // .qdf.csv转换DataTable } if(file.FullName.Contains("_R_tilt_corrected.csv")) { csvTable[1] = ConvertCsvToDataTable(fullPath); } if (file.FullName.Contains("_G_tilt_corrected.csv")) { csvTable[2] = ConvertCsvToDataTable(fullPath); } if (file.FullName.Contains("_B_tilt_corrected.csv")) { csvTable[3] = ConvertCsvToDataTable(fullPath); } if (file.FullName.Contains(".zip")) { zipPath = new[] { fullPath }; } } // post上传数据&文件 JObject UpLoadQdfAndZIPObject = new JObject(); string mesResult = MesRequestHelper.UploadQdfAndZIP(zipPath, csvPath, csvTable, SystemConfig.MachineID, Use.ToClient.ToString(), SystemConfig.OrderID, SystemConfig.model, ProcessCode_RockyP1.BBModule_MTF_Test.ToString()); log.Info(string.Format("UploadQdfAndZIP mes返回的消息:{0}", mesResult)); UpLoadQdfAndZIPObject = JObject.Parse(mesResult); bool status = false; string msg = ""; if (UpLoadQdfAndZIPObject.Property("status") != null) { status = UpLoadQdfAndZIPObject["status"].Value<bool>(); } if (UpLoadQdfAndZIPObject.Property("msg") != null) { msg = UpLoadQdfAndZIPObject["msg"].ToString(); } if(status) // 通知机台后台服务 { bool result = BackendService(); log.Info(string.Format("通知机台后台服务结果:{0}", result)); } } catch (Exception ex) { log.Error(string.Format("UploadTestResult result:{0}, failed:{1}", requestJson.ToString(), ex.Message)); } } 这个函数为啥会捕捉到输入数组长度大于此表中的列数
06-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值