【发布时间】:2020-04-12 06:41:01
【问题描述】:
我必须实现将一些 TEST 类型的数据导出到 excel 的功能。视图有一个表,其中填充了一些 TEST 类型的数据。为了让它更有趣,用户可以从这个类型 T 中选择要导出的列。
所以我不能为每个案例制作模型(也许我需要在运行时使用反射和创建类?)因为这种类型的 TEST 有大约 50 个属性(列)。
我发现我可以创建具有选定属性(列)的动态对象列表,但我无法想象我该怎么做。
我有一个方法需要提供工作表、完整数据模型 TEST 列表和列名列表(用于 excel 标题):
public static void FillSheetWithData(ExcelWorksheet ws, List<TEST> data, List<string> columns)
{
for... [creating header]
//create dynamic object from TEST only with properties from columns parameter
List<dynamic> mappedData = data.???
//fill excel with data
ws.Cells["A2"].LoadFromCollection(mappedData);
}
例如:
Main model =>
public class TEST
{
public string Name;
public string Title;
public string Client;
public decimal Price;
public string Address;
public string Owner;
public DateTime Date;
...
}
List of columns =>
List<string> columns = new List<string>
{
"Title",
"Price",
"Name",
"Date"
};
Dynamic object should looks like =>
dynamic obj = new {
Title = "data from main model",
Price = "data from main model",
Name = "data from main model",
Date = "data from main model"
}
如果你有什么想法,我将不胜感激!
【问题讨论】:
-
你的意思是
List<Dictionary<string, object>>?编辑:或者更确切地说List<ExpandoObject>...与ExpandoObject可以用作dynamic或IDictionary<string, object> -
和
List<dynamic> data = new List<dynamic>(); var exp = new ExpandoObject(); var expasdict = exp as IDictionary<string, object>; expasdict[Title] = test.Title; data.Add(exp);