WeihanLi.Npoi 支持 ShadowProperty 了
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
- https://docs.microsoft.com/en-us/ef/core/modeling/shadow-properties
- https://docs.microsoft.com/zh-cn/ef/core/modeling/shadow-properties
- https://github.com/WeihanLi/WeihanLi.Npoi/issues/51
- https://github.com/WeihanLi/WeihanLi.Npoi
WeihanLi.Npoi 支持 ShadowProperty 了的更多相关文章
- WeihanLi.Npoi 导出支持自定义列内容啦
WeihanLi.Npoi 导出支持自定义列内容啦 Intro 之前也有网友给提出过希望列合并或者自定义列内容的 issue 或请求,起初因为自己做 WeihanLi.Npoi 这个扩展的最初目的是导 ...
- WeihanLi.Npoi 1.16.0 Release Notes
WeihanLi.Npoi 1.16.0 Release Notes Intro 最近有网友咨询如何设置单元格样式,在之前的版本中是不支持的,之前主要考虑的是数据,对于导出的样式并没有支持,这个 is ...
- 使用 WeihanLi.Npoi 操作 CSV
使用 WeihanLi.Npoi 操作 CSV Intro 最近发现 csv 文件在很多情况下都在使用,而且经过大致了解,csv 格式简单,相比 excel 文件要小很多,读取也很是方便,而且也很通用 ...
- WeihanLi.Npoi 近期更新
WeihanLi.Npoi 近期更新 Intro 最近对我的 NPOI 扩展做了一些改变,一方面提高性能,一方面修复bug,增加一些新的功能来让它更加好用,前几天发布了 1.5.0 版本,下面来介绍一 ...
- WeihanLi.Npoi 根据模板导出Excel
WeihanLi.Npoi 根据模板导出Excel Intro 原来的导出方式比较适用于比较简单的导出,每一条数据在一行,数据列虽然自定义程度比较高,如果要一条数据对应多行就做不到了,于是就想支持根据 ...
- WeihanLi.Npoi 1.11.0/1.12.0 Release Notes
WeihanLi.Npoi 1.11.0/1.12.0 Release Notes Intro 最近 NPOI 扩展新更新了两个版本,感谢 shaka chow 的帮忙和支持,这两个 Feature ...
- WeihanLi.Npoi 1.13.0 更新日志
WeihanLi.Npoi 1.13.0 更新日志 Intro 在 Github 上收到 Issue 收到网友反馈希望支持自动分 Sheet 导出,有兴趣的可以参考 Issue https://git ...
- WeihanLi.Npoi 1.14.0 Release Notes
WeihanLi.Npoi 1.14.0 Release Notes Intro 周末更新了一下项目,开始使用可空引用类型,并且移除了 net45 的支持,仅支持 netstandard2.0 Cha ...
- WeihanLi.Npoi
WeihanLi.Npoi Intro Npoi 扩展,适用于.netframework4.5及以上和netstandard2.0, .netframework基于NPOI, .netstandard ...
随机推荐
- Project Euler 59: XOR decryption
计算机上的每个字母都对应一个独特的编号,普遍接受的标准是ASCII(美国信息交换标准代码).例如,大写字母的A的ASCII码是65,星号(*)的ASCII码是42,而小写字母k的代码是107. 一种现 ...
- Scrapy进阶知识点总结(一)——基本命令与基本类(spider,request,response)
一.常见命令 scrapy全局命令可以在任何地方用,项目命令只能在项目路径下用 全局命令: 项目命令: startproject crawl genspider check settings list ...
- Non-local Neural Networks 原理详解及自注意力机制思考
Paper:https://arxiv.org/abs/1711.07971v1 Author:Xiaolong Wang, Ross Girshick, Abhinav Gupta, Kaiming ...
- Python项目开发公用方法--excel生成方法
在实际开发中,我们有时会遇到数据导出的需求.一般的,导出的文件格式为Excel形式. 那么,excel的生成就适合抽离出一个独立的公用方法来实现: def generate_excel(excel_n ...
- iOS UIView x Android View
- python:利用celery分布任务
Celery是一个功能完备即插即用的任务队列.它使得我们不需要考虑复杂的问题,使用非常简单.celery看起来似乎很庞大.celery适用异步处理问题,当发送邮件.或者文件上传, 图像处理等等一些比较 ...
- 面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化. 一般有两种方案:即优化代码或更改设计方法.我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性 ...
- 扛把子组20191031-8 alpha week 1/2 Scrum立会报告+燃尽图 06
此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9916 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 ...
- react create-react-app使用less 及关闭eslint
使用less和关闭eslint都需要先运行命令 npm run eject 来暴露配置文件,(不可逆的) 一.less使用 运行命令安装less npm install less less-load ...
- 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人
蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...