首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将IList <T>或IQueryable <T>保存到Excel - C#

将IList <T>或IQueryable <T>保存到Excel是一个常见的需求,以下是一个简单的方法,使用C#编写,将IList <T>或IQueryable <T>保存到Excel文件中。

首先,需要安装以下NuGet包:

  • ClosedXML
  • ClosedXML.Extensions

安装完成后,可以使用以下代码将IList <T>或IQueryable <T>保存到Excel文件中:

代码语言:csharp
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using ClosedXML.Excel;

public static class ExcelExtensions
{
    public static void ToExcel<T>(this IList<T> list, string filePath)
    {
        var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
        var fields = typeof(T).GetFields(BindingFlags.Public | BindingFlags.Instance);

        using var workbook = new XLWorkbook();
        var worksheet = workbook.Worksheets.Add("Sheet1");

        // 写入表头
        var colIndex = 1;
        foreach (var property in properties)
        {
            worksheet.Cell(1, colIndex).Value = property.Name;
            colIndex++;
        }
        foreach (var field in fields)
        {
            worksheet.Cell(1, colIndex).Value = field.Name;
            colIndex++;
        }

        // 写入数据
        for (var rowIndex = 0; rowIndex< list.Count; rowIndex++)
        {
            var item = list[rowIndex];
            colIndex = 1;
            foreach (var property in properties)
            {
                worksheet.Cell(rowIndex + 2, colIndex).Value = property.GetValue(item);
                colIndex++;
            }
            foreach (var field in fields)
            {
                worksheet.Cell(rowIndex + 2, colIndex).Value = field.GetValue(item);
                colIndex++;
            }
        }

        workbook.SaveAs(filePath);
    }
}

使用方法:

代码语言:csharp
复制
var list = new List<Person>();
// 添加数据
list.ToExcel("output.xlsx");

其中,Person是一个简单的类,包含一些属性和字段,例如:

代码语言:csharp
复制
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
}

这样,就可以将IList <T>或IQueryable <T>保存到Excel文件中了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.NET面试题系列 - IEnumerable的派生类

注意C#没有List,只有IListIList和List。其中第三个继承第二个。第一个是第二个的非泛型版本。ArrayList则继承第一个。...T>) 查找:O(N) 关于链表的算法面试题可谓五花八门,实现一个单向双向链表,并实现它们的若干主要功能,是一个极好的编程练习。...IEnumerable替代作为返回类型 IQueryable 通过IndexOf IEnumerable 从远端获得筛选之后的资料,和IEnumerable不同,IQueryable...它又有两个主要的派生类Array和List。List的内部实现是一个数组而不是链表。LinkedList才是C#的链表实现。LinkedList不实现IList接口。...当集合元素未知,且经常存在插入删除的动作时,考虑使用LinkedList取代List。

1.7K20

最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary

本文对常用的数据结构详述:Array, ArrayList,List,IList,ICollection, Stack, Queue, HashTable, Dictionary, IQueryable...Collection(集合) Collection是数据记录集合, 编写代码过程中,常常需要合适的容器保存临时数据,方便修改和查找,如何选取合适的数据容器,关键在于执行的数据操作以及数据记录是否大量。...具体类可继承其他类,并实现一个多个接口。 2. 在内部类中可以定义变量并赋值,接口中不允许此操作。 3. 具体类可包含构造函数,而接口中不能定义构造函数 4....)数据,使用IEnumberable 会从服务器端所有数据拷贝到客户端,并进行一定的过滤,如果服务器端有大量数据会造成内存负载超重。...IQueryable可保证大数据量时应用程序的高性能。 IQueryable会先过滤数据,然后发送给客户端。 ?

1.9K80
  • .NET中数据访问方式(一):LINQ

    可查询类型 LINQ之所以能够使用相同的语法操作不同的数据源,是因为和LINQ直接打交道的是可查询类型而非数据源,在LINQ中,直接间接实现了IEnumerable接口的类型称为可查询类型, ....IQueryable继承自IEnumerable,是个标记接口。...两个接口 在LINQ中,一个查询表达式被编译为表达式树或者委托,查询结果为IEnumerable类型则被编译为委托,查询结果是IQueryableIQueryable类型则被编译为表达式树...System.Linq.IQueryable 在执行查询操作时,IQueryable先在服务器端进行过滤操作(如果有的话),然后再将数据放到本地内存中。...(C#) LINQ provider basics Enabling a Data Source for LINQ Querying LINQ: Building an IQueryable Provider

    2.7K30

    C#规范整理·集合和Linq

    不要小看这些技巧,一旦在开发中使用了错误的集合针对集合的方法,应用程序将会背离你的预想而运行。 正文# ### 1.元素数量可变的情况下不应使用数组   在C#中,数组一旦被创建,长度就不能改变。...如果一定要动态改变数组的长度,一种方法是数组转换为ArrayListList<T>,需要扩容时,内部数组将自动翻倍扩容 还有一种方法是用数组的复制功能。...FCL集合类应该以组合的形式包含至自定义的集合类,需扩展的泛型接口通常是IEnumer-able<T>和ICollection<T>(ICollection<T>的子接口,如IListT>),前者规范了集合类的迭代功能...那么,到底什么时候使用IQueryableT>,什么时候使用IEnumerable<T>呢?简单表述就是:本地数据源用IEnumerable<T>,远程数据源用IQueryableT>。...注意 在使用IQueryableT>和IEnumerable<T>的时候还需要注意一点,IEnumerable<T>查询的逻辑可以直接用我们自己所定义的方法,而IQueryableT>则不能使用自定义的方法

    19230

    .NET面试题系列 - LINQ to SQL与IQueryable

    LINQ to SQL可以查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。...查询表达式转换为SQL语句并不保证一定可以成功。 IQueryable 理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。...它令IQueryable和IEnumerable一样,拥有强大的查询能力。 AsQueryable方法IEnumerable转换为IQueryable。...大家可以使用EF其他方式。...但是IQueryable的优势是它有表达式树,所有对于IQueryable的过滤,排序等操作,都会先缓存到表达式树中,只有当真正发生遍历的时候,才会将表达式树由IQueryProvider执行获取数据操作

    1.6K10

    金三银四面试:C#.NET面试题中高级篇3

    C#异常类返回哪些信息? 10. 如何创建一个自定义异常? IList 接口与List的区别是什么? IList 泛型接口是 Icollection 接口的子代,并且是所有非泛型列表的基接口。...Ilist 实现有三种类别:只读、固定大小、可变大小。无法修改只读 Ilist。固定大小的 Ilist 不允许添加移除元素,但允许修改现有元素。可变大小的 Ilist 允许添加、移除和修改元素。...而 IList IList11 =new List (); 只是想创建一个基于接口IList的对象的实例,只是这个接口是由List实现的。所以它只是希望使用到IList接口规定的功能而已。...次要约束与主要约束的语法基本一致,区别仅在于提供的不是一个引用类型而是一个多个接口。...C#异常类返回哪些信息? C#中,所有异常都继承自System.Exception类,Exception类定义了C#异常应该具有的信息和方法。

    1.4K40

    .NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

    Linq 只是辅助我们快速查询的语言,并不是.NET或者C#的一部分,在任何.NET平台上的语言中都可以使用。...IQueryable并非IEnumerable对象,无法实时的做出处理然后结果返回给下一个方法接着执行。那么它如何片段性的执行方法串成一个整的、完整的查询?...这幅图重点是IQueryable对象的连续操作,大致原理是每次执行扩展方法的时候都会构造一个新的IQueryable,本次的IQueryable对象包含上次执行的表达式树,以此类推就形成了一颗庞大的表达式树...这是问题的重点,对扩展方法、链式编程不熟悉的朋友很难source能串联到之前方法所返回的IQueryable对象上。...3.3】.分段执行IQueryable中的子方法(Queryable中的扩展方法) 都知道Linq的查询是一些关键字拼接起来的,行成连续的查询语义,这其中背后的原理文章上上下下也说过很多遍,我想也应该大致的了解了

    1.4K11

    .NET面试题系列 - IEnumerable的派生类

    ICollection的继承类有Stack,Queue,IDictionary和IListIList本身实现了索引器。...和顺序储存相比,哈希表查找速度快,而顺序储存理论上最快的速度是O(log(n))O(n)。当数据不连续时,哈希表还能节省空间(相比大数组)。...ArrayList是C#最不常用(我想不出任何用它的理由)也是最基础的一个动态数组。 通常我们在说ArrayList时,总是和List和普通的数组(无法扩容)进行比较。...ArrayList派生自IList,所以其是一个非泛型的集合。IList继承ICollection,同时,其增加了Add,Remove等方法。可以修改集合的内容。...方法 ArrayList 索引器 IList dynamic sized,大小倍增 弱类型(所有的成员被视作object) 对应的泛型版本为List 不使用 HashTable 键值对 IDictionary

    82220

    C#3.0新增功能09 LINQ 基础01 语言集成查询

    语言集成查询 (LINQ) 是一系列直接查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串,没有编译时类型检查 IntelliSense 支持。...在 C# 中可为以下对象编写 LINQ 查询:SQL Server 数据库、XML 文档、ADO.NET 数据集以及支持 IEnumerable 泛型 IEnumerable 接口的任何对象集合...查询表达式易于掌握,因为使用了许多熟悉的 C# 语言构造。 查询表达式中的变量全都是强类型,尽管在许多情况下,无需显式提供类型,因为编译器可以推断出。...有关详细信息,请参阅 C# 语言规范和标准查询运算符概述。 通常,我们建议在编写 LINQ 查询时尽量使用查询语法,并在必要时尽可能使用方法语法。 这两种不同的形式在语义性能上毫无差异。...查询表达式可被编译成表达式树委托,具体视应用查询的类型而定。IEnumerable 查询编译为委托。 IQueryableIQueryable 查询编译为表达式树。

    1.8K10

    了解C#的协变和逆变

    你可以 IEnumerable 的实例分配给 IEnumerable 类型的变量。 Contravariance 使你能够使用比原始指定的类型更泛型(派生程度更小)的类型。...你可以 Action 的实例分配给 Action 类型的变量。 Invariance 表示只能使用最初指定的类型。 固定泛型类型参数既不是协变,也不是逆变。...你无法 List 的实例分配给 List 类型的变量,反之亦然。 以上来自于官方文档对协变、逆变、不变性的解释 为啥C#需要协变和逆变?...,在这里就是在泛型体系中支持 在C#中,目前只有泛型接口和泛型委托可以支持协变和逆变, 协变(Covariance) 内置的泛型协变接口,IEnumerator、IQuerable、IGrouping... GetEnumerator(); } public interface IQueryable : IEnumerable, IEnumerable, IQueryable

    93110

    .NET 开箱即用的Excel工具包已发布

    特点 提供独立Excel校验工具; 提供Cli版本和带UI(WPF)版本的程序; 提供ODBC扩展; 基于json文件类型+成员属性(Attribute)的配置方式。...导出Excel IList src = ......使用说明 编辑你的C#类,此类将作为ExcelPatternTool导入导出功能的承载实体类型,继承自IExcelEntity 常规类型 常规类型是C#基本数据类型,直接输出的为单元格值 可定义 string..., DateTime,int,double,bool 高级类型 使用高级类型导入时不光读取数据,还将读取单元格细节,导出至Excel时,保留这些细节。...Exportable注解 1、Order 列序号为此列在Excel中的编号,从0开始,即A列对应0,B列对应1 ... 2、Name 列名称,指定导出时的该列第一行名称 3、Ignore 为True时忽略这一列

    27030
    领券