跳至页脚内容
.NET 帮助

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

集成查询语言(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);
        }
    }
}
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);
        }
    }
}
$vbLabelText   $csharpLabel

自定义相等比较器

可以通过使用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}");
        }
    }
}
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}");
        }
    }
}
$vbLabelText   $csharpLabel

使用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);
        }
    }
}
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);
        }
    }
}
$vbLabelText   $csharpLabel

使用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}");
        }
    }
}
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}");
        }
    }
}
$vbLabelText   $csharpLabel

通过特定属性来区分

在处理对象时,您可以创建自己的逻辑来根据某个属性进行区分,或者您可以使用来自第三方库(如 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}");
        }
    }
}
// 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}");
        }
    }
}
$vbLabelText   $csharpLabel

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");
    }
}
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");
    }
}
$vbLabelText   $csharpLabel

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包管理器控制台中输入以下代码以完成此操作:

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 dotnet 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}");
    }
}
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}");
    }
}
$vbLabelText   $csharpLabel

在此示例中,使用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#应用程序的不同方面开发出可靠和富有表现力的解决方案。 在将这些策略应用于您的项目时,请记住您的应用程序的特定需求,并调整实现以达到最大的可靠性和性能。

常见问题解答

如何从 C# 集合中删除重复条目?

您可以使用 LINQ 的 Distinct 方法从 C# 集合中删除重复条目。当与 IronPDF 结合使用时,该方法特别有用,可以从不同的数据类别生成唯一的 PDF 文档。

如何在 C# 中将 HTML 转换为 PDF?

要在 C# 中将 HTML 转换为 PDF,您可以使用 IronPDF 的 RenderHtmlAsPdf 方法。这使您可以高效地将 HTML 字符串或文件转换为 PDF 文档。

我可以在自定义对象上使用 LINQ 的 Distinct 方法吗?

是的,您可以通过提供自定义相等比较器在自定义对象上使用 LINQ 的 Distinct 方法。 当您需要为 PDF 生成过程中的唯一性定义特定标准时,这很有用。

使用 LINQ 与 IronPDF 有什么优势?

使用 LINQ 与 IronPDF 允许开发人员基于数据处理创建独特和高效的 PDF 文档。 特别是在管理大规模文档生成任务时,它增强了代码可读性和性能。

LINQ 的 Distinct 方法如何增强 PDF 文档创建?

LINQ 的 Distinct 方法通过确保最终输出中仅包含唯一条目来增强 PDF 文档创建。 该方法可与 IronPDF 结合使用,以为各种数据类别生成不同的 PDF 文档。

使用 IronPDF 时,可以自定义 PDF 输出吗?

是的,IronPDF 提供了各种自定义 PDF 输出的选项,包括设置页面大小、边距以及添加页眉或页脚。 这些自定义可以与 LINQ 结合使用来创建定制的独特文档输出。

哪些场景可以从使用 LINQ 的 Distinct 方法与 PDF 中受益?

生成报告、发票或任何需要数据集唯一性的文档等场景可以从使用 LINQ 的 Distinct 方法与 PDF 中受益。 IronPDF 可用于高效生成简洁且独特的 PDF 输出。

LINQ 如何提高数据驱动 PDF 应用程序的效率?

LINQ 通过允许开发人员在生成 PDF 之前过滤和操作数据集来提高数据驱动 PDF 应用程序的效率。这确保仅将必要且唯一的数据包含在 PDF 中,从而优化性能和资源使用。

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

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

Jacob 拥有曼彻斯特大学土木工程一级荣誉工程学士学位(BEng)(1998-2001 年)。他的旗舰产品 IronPDF 和 Iron Suite for .NET 库在全球的 NuGet 安装量已超过 3000 万次,其基础代码继续为全球使用的开发人员工具提供动力。Jacob 拥有 25 年的商业经验和 41 年的编码专业知识,他一直专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me