美文网首页Amazing .NET.NET Core
WeihanLi.Npoi 支持 ShadowProperty

WeihanLi.Npoi 支持 ShadowProperty

作者: 天天向上卡索 | 来源:发表于2019-12-13 09:36 被阅读0次

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; }
        }
    }
}

导出效果如下:

image

可以看到,我们为导出的 Excel 增加在原本的 Model 里没有定义的两列,借助于此,我们可以更灵活的定制要导出的内容

More

快来体验吧,欢迎反馈,欢迎 issue

Reference

相关文章

  • WeihanLi.Npoi 支持 ShadowProperty

    WeihanLi.Npoi 支持 ShadowProperty 了 Intro 在 EF 里有个 ShadowPr...

  • WeihanLi.Npoi 1.7.0 更新介绍

    WeihanLi.Npoi 1.7.0 更新介绍 Intro 昨天晚上发布了 WeihanLi.Npoi 1.7....

  • WeihanLi.Npoi 导出支持自定义列内容啦

    WeihanLi.Npoi 导出支持自定义列内容啦 Intro 之前也有网友给提出过希望列合并或者自定义列内容的 ...

  • 使用WeihanLi.Npoi操作Excel

    WeihanLi.Npoi Intro Npoi 扩展,适用于.netframework4.5及以上和netsta...

  • 使用WeihanLi.Npoi操作csv

    使用 WeihanLi.Npoi 操作 CSV Intro 最近发现 csv 文件在很多情况下都在使用,而且经过大...

  • WeihanLi.Npoi 近期更新

    WeihanLi.Npoi 近期更新 Intro 最近对我的 NPOI 扩展做了一些改变,一方面提高性能,一方面修...

  • WeihanLi.Npoi 根据模板导出Excel

    WeihanLi.Npoi 根据模板导出Excel Intro 原来的导出方式比较适用于比较简单的导出,每一条数据...

  • 支持,支持

    从不理解孩子的行为到支持,我的观念转变的还是蛮快的。 孩子都没有时间和我交流了,我只好自己上网搜了一下大学生商赛。...

  • 支持,真的支持

    朋友圈看到这样一条简讯,哭笑不得,哈哈,不过,很称赞这种惩罚措施,即可以教育当事人,也可以让本人学会防疫...

  • 支持

    日记130 今天首先给我们三班参与值勤的家长点赞。小雨淅淅沥沥的下了一天,时大时小。这周该我们班值勤了,我们的...

网友评论

    本文标题:WeihanLi.Npoi 支持 ShadowProperty

    本文链接:https://www.haomeiwen.com/subject/foaxnctx.html