一.获取对象中的所有属性
Type是.net定义的一个反射的类。通过反射获取到对象的所有属性,然后根据属性获取对象对应属性所对应的值。
使用PropertyInfo,请引用命名空间using System.Reflection;
1、首先定义一个对象People

1 /// <summary> 2 /// 定义一个People类 3 /// </summary> 4 public class People 5 { 6 /// <summary> 7 /// 省份证号 8 /// </summary> 9 public string CartId { get; set; } 10 /// <summary> 11 /// 名字 12 /// </summary> 13 public string Name { get; set; } 14 /// <summary> 15 /// 出生日期 16 /// </summary> 17 public DateTime BirthDay { get; set; } 18 /// <summary> 19 /// 性别 20 /// </summary> 21 public string Sex { set; get; } 22 }
2、对象初始化
//利用对象初始化器初始化对象
People people = new People
{
CartId = "5342323123124124124",
Name = "zhangsan",
BirthDay = new DateTime(1990, 9, 11),
Sex = "男"
};
3、获取属性值
//获取Name属性的值
Console.WriteLine(type.GetProperty("Name").GetValue(people, null));
4、调用对应属性的值

1 static void Main(string[] args) 2 { 3 //利用对象初始化器初始化对象 4 People people = new People 5 { 6 CartId = "5342323123124124124", 7 Name = "zhangsan", 8 BirthDay = new DateTime(1990, 9, 11), 9 Sex = "男" 10 }; 11 //获取People的数据类型 12 Type type = people.GetType(); 13 //获取对象的所有属性 14 PropertyInfo[] properties = type.GetProperties(); 15 //获取Name属性的值 16 Console.WriteLine(type.GetProperty("Name").GetValue(people, null)); 17 //获取所有属性的名称和对应的值 18 foreach (var pro in properties) 19 { 20 //属性的名称 21 Console.WriteLine(pro.Name); 22 //属性对应的值 23 Console.WriteLine(pro.GetValue(people, null)); 24 } 25 Console.ReadKey(); 26 }
实例:
对于Linq的数据导出成Excel
首先对于var q =from m in dbContext.Pepples
where m.Sex=="男"
select new{
姓名=m.Name,
省份证号=m.CartId,
出生日期=m.BirthDay,
性别=m.Sex
};
我们得到的q是一个IEnumerable<T>类型的数据.对于这种数据我们一般都是可以使用.ToList()将其转化为范型集合来处理。
我们怎么样将数据导出的呢?
首先定义一个函数
1 /// <summary> 2 /// 导出数据源 3 /// </summary> 4 /// <param name="list">数据源</param> 5 public static void OutPutList<T>(List<T> list) 6 { 7 XlsDocument xls = new XlsDocument(); 8 Worksheet sheet = xls.Workbook.Worksheets.Add("数据表"); 9 //获取数据的类型 10 Type type = list[0].GetType(); 11 PropertyInfo[] properties = type.GetProperties(); 12 //获取模型的所有属性(名称) 13 for (int i = 0; i < properties.Length; i++) 14 { 15 sheet.Cells.Add(1, i + 1, properties[i].Name); 16 } 17 18 //将数据写入到Excel 19 for (int j = 0; j < list.Count; j++) 20 { 21 type = list[j].GetType(); 22 properties = type.GetProperties(); 23 for (int i = 0; i < properties.Length; i++) 24 { 25 //获取对应属性的对应值 26 sheet.Cells.Add(j + 2, i + 1, properties[i].GetValue(list[j], null)); 27 } 28 } 29 30 //写入数据库 31 xls.FileName = "FF_" + DateTime.Now.ToString("yyyyMMddHHmmss"); 32 xls.Send(); 33 }
这种方法的缺点就是不能按照想要的顺序导出成EXCEL.