IRONSOFTWAREHOME
开发者更新

C# LINQ Distinct(开发人员如何使用)

Jacob Mellor,Team Iron 的首席技术官
Jacob Mellor
Updated: 2026年4月21日

集成查询语言(LINQ)是C#中的一项强大语言功能,使程序员能够为各种数据源创建清晰、富有表现力的查询。 这篇文章将讨论使用IronPDF与C#中用于处理PDF文档的多功能库的使用,并利用LINQ的Distinct功能。 我们将展示这种组合如何可以使从集合中创建独特文档的过程更简单。 在本文中,我们将学习C# LINQ distinct功能与IronPDF。

如何使用C# LINQ Distinct方法

  1. 创建一个新的控制台项目。
  2. 导入System.Linq命名空间。
  3. 创建一个包含多个项目的列表。
  4. 从列表中调用Distinct()方法。
  5. 获取唯一值并在控制台上显示结果。
  6. 处理所有已创建的对象。

什么是LINQ

通过C#的LINQ(集成查询语言)功能,开发人员可以直接在代码中构建用于数据操作的清晰和富有表现力的查询。 首次在.NET Framework 3.5中引入,LINQ提供了一种用于查询多种数据源(包括数据库和集合)的标准语法。 LINQ通过使用Select等操作符,使过滤和投影等简单任务更加容易,从而提高代码可读性。 由于它允许延迟执行以实现最佳速度,这一功能对C#开发人员来说是至关重要的,以确保数据操作操作能够快速并自然地以类似于SQL的方式完成。

理解LINQ Distinct

可以使用LINQ的Distinct函数从集合或序列中移除重复元素。 在没有定制化相等比较器的情况下,它使用默认比较器来比较项目。 在需要处理独特集合并移除重复组件的情况下,这使其成为很好的选择。 Distinct技术使用默认的相等比较器来评估值。 它将排除重复项,仅返回唯一元素。

基本用法

要获取不同的项,最简单的方法是在集合上直接使用Distinct方法。

using System.Linq;
using System.Collections.Generic;

public class DistinctExample
{
    public static void Example()
    {
        // Example list with duplicate integers
        List<int> numbers = new List<int> { 1, 2, 2, 3, 4, 4, 5 };

        // Using Distinct to remove duplicates
        var distinctNumbers = numbers.Distinct();

        // Display the distinct numbers
        foreach (var number in distinctNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

自定义相等比较器

可以通过使用Distinct函数的重载定义一个自定义的相等比较。 如果您希望根据特定标准比较项目,这很有帮助。 请参考以下示例:

using System;
using System.Collections.Generic;
using System.Linq;

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class PersonEqualityComparer : IEqualityComparer<Person>
{
    public bool Equals(Person x, Person y)
    {
        return x.FirstName == y.FirstName && x.LastName == y.LastName;
    }

    public int GetHashCode(Person obj)
    {
        return obj.FirstName.GetHashCode() ^ obj.LastName.GetHashCode();
    }
}

public class DistinctCustomComparerExample
{
    public static void Example()
    {
        // Example list of people
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe" },
            new Person { FirstName = "Jane", LastName = "Doe" },
            new Person { FirstName = "John", LastName = "Doe" }
        };

        // Using Distinct with a custom equality comparer
        var distinctPeople = people.Distinct(new PersonEqualityComparer());

        // Display distinct people
        foreach (var person in distinctPeople)
        {
            Console.WriteLine($"{person.FirstName} {person.LastName}");
        }
    }
}

使用Distinct与值类型

在使用Distinct方法与值类型时,您无需提供自定义的相等比较。

using System;
using System.Collections.Generic;
using System.Linq;

public class DistinctValueTypeExample
{
    public static void Example()
    {
        List<int> integers = new List<int> { 1, 2, 2, 3, 4, 4, 5 };

        // Using Distinct to remove duplicates
        var distinctIntegers = integers.Distinct();

        // Display distinct integers
        foreach (var integer in distinctIntegers)
        {
            Console.WriteLine(integer);
        }
    }
}

使用Distinct与匿名类型

Distinct可以与匿名类型一起使用,基于特定属性去除重复项。 请参考以下示例:

using System;
using System.Collections.Generic;
using System.Linq;

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class DistinctAnonymousTypesExample
{
    public static void Example()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe" },
            new Person { FirstName = "Jane", LastName = "Doe" },
            new Person { FirstName = "John", LastName = "Doe" }
        };

        // Using Distinct with anonymous types
        var distinctPeople = people
            .Select(p => new { p.FirstName, p.LastName })
            .Distinct();

        // Display distinct anonymous types
        foreach (var person in distinctPeople)
        {
            Console.WriteLine($"{person.FirstName} {person.LastName}");
        }
    }
}

通过特定属性来区分

在处理对象时,可以为某一属性创建您的逻辑进行区分,也可以利用第三方库(例如MoreLINQ)的DistinctBy扩展方法。

// Ensure to include the MoreLINQ Library
using MoreLinq;
using System;
using System.Collections.Generic;
using System.Linq;

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class DistinctByExample
{
    public static void Example()
    {
        List<Person> people = new List<Person>
        {
            new Person { Id = 1, FirstName = "John", LastName = "Doe" },
            new Person { Id = 2, FirstName = "Jane", LastName = "Doe" },
            new Person { Id = 1, FirstName = "John", LastName = "Doe" }
        };

        // Using DistinctBy to filter distinct people by Id
        var distinctPeople = people.DistinctBy(p => p.Id);

        // Display distinct people
        foreach (var person in distinctPeople)
        {
            Console.WriteLine($"{person.Id}: {person.FirstName} {person.LastName}");
        }
    }
}

IronPDF

程序员可以使用C#语言创建、编辑和修改PDF文档,并借助.NET库IronPDF网站。 该程序提供了一系列工具和功能,以实现各种涉及PDF文件的任务,如从HTML生成PDF,将HTML转换为PDF,合并或拆分PDF文档,以及添加文本、图像和注释到现有PDF。 要了解有关IronPDF的更多信息,请参考他们的IronPDF文档。

IronPDF的主要功能是HTML到PDF转换,以保持您的布局和样式完整无损。 您可以从网页内容生成PDF,非常适合报告、发票和文档。 它支持将HTML文件、URL和HTML字符串转换为PDF文件。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

IronPDF。的功能

  • **转换HTML到PDF:**您可以使用IronPDF将任何形式的HTML数据(包括文件、URL和HTML代码字符串)转换为PDF文档。
  • **PDF生成:**文本、图像及其他元素可以通过C#编程语言以编程方式添加到PDF文档中。
  • **PDF操作:**IronPDF可以将一个PDF文件拆分为多个文件,合并多个PDF文档为一个文件,并编辑已存在的PDF。
  • **PDF表单:**该库允许用户创建和填写PDF表单,这在需要收集和处理表单数据的情况下很有用。
  • **安全功能:**IronPDF可以用于加密PDF文档并提供密码和许可保护。
  • **文本提取:**可以使用IronPDF从PDF文件中提取文本。

安装IronPDF

获取 IronPDF 库; 这对设置项目至关重要. 在NuGet包管理器控制台中输入以下代码以完成此操作:

PM > Install-Package IronPdf

C# LINQ Distinct (How It Works For Developers): Figure 1 - To install the IronPDF library using the NuGet Package Manager Console, enter the following command: "Install IronPDF" or ".NET add package IronPDF"

使用NuGet包管理器搜索包"IronPDF"是另一种选择。我们可以从这个列表中选择并下载与IronPDF相关的所有所需NuGet包。

C# LINQ Distinct (How It Works For Developers): Figure 2 - To install the IronPDF library using the NuGet Package Manager, search for the package "IronPDF" in the Browse tab and choose the latest version of IronPDF package to download and install in your project.

LINQ与IronPDF

请考虑这样一种情况,您有一组数据,并希望根据该组中的不同值创建各种PDF文档。 这是LINQ的Distinct的实用性所在,尤其是在与IronPDF一起快速创建文档时。

使用LINQ和IronPDF生成独特的PDF

using IronPdf;
using System;
using System.Collections.Generic;
using System.Linq;

public class DocumentGenerator
{
    public static void Main()
    {
        // Sample data representing categories
        List<string> categories = new List<string>
        {
            "Technology",
            "Business",
            "Health",
            "Technology",
            "Science",
            "Business",
            "Health"
        };

        // Use LINQ Distinct to filter out duplicate values
        var distinctCategories = categories.Distinct();

        // Generate a distinct elements PDF document for each category
        foreach (var category in distinctCategories)
        {
            GeneratePdfDocument(category);
        }
    }
    
    private static void GeneratePdfDocument(string category)
    {
        // Create a new PDF document using IronPDF
        IronPdf.HtmlToPdf renderer = new IronPdf.HtmlToPdf();
        PdfDocument pdf = renderer.RenderHtmlAsPdf($"<h1>{category} Report</h1>");
        
        // Save the PDF to a file
        string pdfFilePath = $"{category}_Report.pdf";
        pdf.SaveAs(pdfFilePath);
        
        // Display a message with the file path
        Console.WriteLine($"PDF generated successfully. File saved at: {pdfFilePath}");
    }
}

在此示例中,通过对类别集合使用Distinct方法获取一系列不同的类别。 它有助于从序列中移除重复元素。 接下来,使用IronPDF创建包含这些唯一元素的PDF文档。 这种方法确保只为唯一类别生成单独的PDF文档。

控制台输出

C# LINQ Distinct(开发者如何使用):图3 - 控制台输出

生成的PDF输出

C# LINQ Distinct(开发者如何使用):图4 - PDF输出:技术报告

要了解有关为PDF使用HTML生成的IronPDF代码示例的更多信息,请参考IronPDF HTML到PDF示例代码。

结论

LINQ的Distinct扩展方法与IronPDF结合使用,提供了一种强大且高效的机制,用于基于值创建唯一的PDF文档。 这种方法简化了代码,并确保无论是处理类别、标签还是需要单独文件的任何其他数据,都能有效的生成文档。

通过利用LINQ进行数据处理和IronPDF进行文档制作,您可以为管理您的C#应用程序的不同方面开发出可靠和富有表现力的解决方案。 在将这些策略应用于您的项目时,请记住您的应用程序的特定需求,并调整实现以达到最大的可靠性和性能。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥。

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥。
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 “IronPDF”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在此处下载 Windows 安装程序。

  1. 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置
  2. 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPDF.dll”

$999 起