WeihanLi.Npoi 支持 ShadowProperty 了
程序员文章站
2023-10-16 16:21:59
在 EF 里有个 `ShadowProperty` (阴影属性/影子属性)的概念,你可以通过 FluentAPI 的方式来定义一个不在 .NET model 里定义的属性,只能通过 EF 里的 `Change Tracker` 来操作这种属性。
在导出 Excel 的时候,可能希望导出的列并不... ......
weihanli.npoi 支持 shadowproperty
了
intro
在 ef 里有个 shadowproperty
(阴影属性/影子属性)的概念,你可以通过 fluentapi 的方式来定义一个不在 .net model 里定义的属性,只能通过 ef 里的 change tracker
来操作这种属性。
在导出 excel 的时候,可能希望导出的列并不是都定义好在我们的 model 中的,有的可能只是想增加一列导出某个属性中的嵌套属性之中的某一个属性值,或者我就是单纯的想多定义一列,而这个时候可能 model 是别的地方写死的,不方便改。
于是 weihanli.npoi
从 1.6.0 版本开始支持 shadowproperty
,将 ef 里的 shadowproperty
引入到 excel 导出里,目前来说 shadowproperty
是不可写的,读取的话也只是返回一个类型的默认值,不支持 changetracker
,不支持改。
使用示例
来看一个简单使用示例:(示例来源于网友提出的这个issue: https://github.com/weihanli/weihanli.npoi/issues/51)
using system; using system.collections.generic; using system.io; using weihanli.npoi; namespace npoitest { public class program { public static void main(string[] args) { var settings = excelhelper.settingfor<testentity>(); settings.property(x => x.name) .hascolumnindex(0); // settings.property(x => x.userfields) // .hasoutputformatter((entity, value) => $"{value[0].value},{value[2].value}") // .hascolumntitle("姓名,工号") // .hascolumnindex(1); settings.property(x=>x.userfields).ignored(); settings.property("工号") .hasoutputformatter((entity,val)=> $"{entity.userfields[2].value}") ; settings.property("部门") .hasoutputformatter((entity,val)=> $"{entity.userfields[1].value}") ; var data = new list<testentity>() { new testentity() { name = "xiaoming", totalscore = 100, userfields = new userfield[] { new userfield() { name = "姓名", value = "xaioming", }, new userfield() { name = "部门", value = "1212" }, new userfield() { name = "工号", value = "121213131" }, } } }; data.toexcelfile($@"{directory.getcurrentdirectory()}\output.xls"); console.writeline("complete."); } private class testentity { public string name { get; set; } public userfield[] userfields { get; set; } public int totalscore { get; set; } } private class userfield { public string fid { get; set; } public string name { get; set; } public string value { get; set; } } } }
导出效果如下:
可以看到,我们为导出的 excel 增加在原本的 model 里没有定义的两列,借助于此,我们可以更灵活的定制要导出的内容
more
快来体验吧,欢迎反馈,欢迎 issue
reference
推荐阅读
-
介绍一个比较了各种浏览器对于HTML5 等标准支持程度的网站
-
微软宣布.NET开源:Visual Studio支持Android了
-
AndroidStudio3 支持 Java8 了请问你敢用吗
-
微软宣布.NET开源:Visual Studio支持Android了
-
取代三方工具 Win10原生支持桌面CPU/内存/FPS状态小部件了
-
iphone版skype更新了什么内容 新增apple watch支持
-
必须要升级了!微软:Win10 v1903将于12月8日终止支持
-
不用担心了!微软:Windows 10X支持32位应用
-
AndroidStudio3 支持 Java8 了请问你敢用吗
-
WeihanLi.Npoi 支持 ShadowProperty 了