Saltar al pie de página
.NET AYUDA

C# LINQ Distinct (Cómo Funciona para Desarrolladores)

La consulta integrada en el lenguaje (LINQ), una poderosa característica del lenguaje en C#, permite a los programadores crear consultas claras y expresivas para una variedad de fuentes de datos. Esta publicación discutirá el uso de IronPDF, una versátil biblioteca de C# para trabajar con documentos PDF, utilizando la función Distinct de LINQ. Mostraremos cómo esta combinación puede facilitar el proceso de creación de documentos únicos a partir de una colección. En este artículo, vamos a aprender sobre la función distinct de LINQ en C# con IronPDF.

Cómo utilizar el método C# LINQ Distinct

  1. Cree un nuevo proyecto de consola.
  2. Importe el espacio de nombres System.Linq.
  3. Cree una lista con varios elementos.
  4. Llame al método Distinct() desde la Lista.
  5. Obtenga los valores únicos y muestre el resultado en la consola.
  6. Deseche todos los objetos creados.

Qué es LINQ

Los desarrolladores pueden construir consultas claras y expresivas para la manipulación de datos directamente en su código con la característica LINQ (Consulta Integrada al Lenguaje) en C#. Incluido por primera vez en .NET Framework 3.5, LINQ ofrece una sintaxis estándar para consultar una variedad de fuentes de datos, incluidas bases de datos y colecciones. LINQ facilita tareas simples como filtrado y proyección utilizando operadores como Where y Select, que mejoran la legibilidad del código. Debido a que permite la ejecución diferida para una velocidad óptima, esta característica es crucial para los desarrolladores de C# para asegurarse de que las operaciones de manipulación de datos se completen de manera rápida y natural de una manera análoga a SQL.

Entendiendo LINQ Distinct

Los elementos duplicados se pueden eliminar de una colección o secuencia utilizando la función Distinct de LINQ. En ausencia de un comparador de igualdad personalizado, compara los elementos utilizando su comparador por defecto. Esto lo convierte en una excelente opción en situaciones donde necesitas trabajar con una colección única y eliminar componentes duplicados. La técnica Distinct utiliza los comparadores de igualdad predeterminados para evaluar valores. Excluye duplicados para devolver solo elementos únicos.

Uso básico

Para obtener elementos distintos, la forma más sencilla de utilizarlo es utilizar el método Distinct directamente en una colección.

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

Comparador de igualdad personalizado

Puede definir una comparación de igualdad personalizada utilizando una sobrecarga de la función Distinct. Esto es útil si deseas comparar elementos de acuerdo con criterios particulares. Por favor, consulta el siguiente ejemplo:

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

Uso de Distinct con tipos de valor

No es necesario proporcionar una comparación de igualdad personalizada cuando se utiliza el método Distinct con tipos de valor.

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

Uso de Distinct con tipos anónimos

Distinct se puede utilizar con tipos anónimos para eliminar duplicados según atributos particulares. Por favor, consulta el siguiente ejemplo:

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

Distinción por una propiedad específica

Al trabajar con objetos, puede crear su propia lógica para distinguirlos por un atributo determinado o puede utilizar el método de extensión DistinctBy de bibliotecas de terceros (como MoreLINQ).

// 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

Los programadores pueden crear, editar y modificar documentos PDF usando el lenguaje C# con la ayuda de la biblioteca .NET IronPDF Website. El programa proporciona una variedad de herramientas y funcionalidades para habilitar diversas tareas relacionadas con archivos PDF, como generar PDFs desde HTML, convertir HTML a PDF, fusionar o dividir documentos PDF, y agregar texto, imágenes y anotaciones a PDFs ya existentes. Para saber más sobre IronPDF, consulta su Documentación de IronPDF.

La principal característica de IronPDF es Conversión HTML a PDF, que mantiene tus diseños y estilos intactos. Puedes generar PDFs a partir de contenido web, perfecto para informes, facturas y documentación. Admite la conversión de archivos HTML, URL y cadenas HTML a archivos 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

Características de IronPDF

  • Convertir HTML a PDF: Puedes usar IronPDF para convertir cualquier tipo de datos HTML —incluyendo archivos, URL y cadenas de código HTML— en documentos PDF.
  • Generación de PDF: Puedes agregar programáticamente texto, imágenes y otros elementos a documentos PDF usando el lenguaje de programación C#.
  • Manipulación de PDF: IronPDF puede dividir un archivo PDF en varios archivos, fusionar varios documentos PDF en un solo archivo y editar PDFs existentes.
  • Formularios PDF: La biblioteca permite a los usuarios construir y completar formularios PDF, lo que es útil en escenarios donde se necesita recopilar y procesar datos de formularios.
  • Características de Seguridad: Se puede usar IronPDF para encriptar documentos PDF y proporcionar protección mediante contraseña y permisos.
  • Extracción de Texto: Se puede extraer texto de archivos PDF utilizando IronPDF.

Instalar IronPDF

Obtenga la biblioteca IronPDF; es necesario para configurar tu proyecto. Ingresa el siguiente código en la Consola del Administrador de Paquetes NuGet para lograr esto:

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

Usar el Administrador de Paquetes NuGet para buscar el paquete "IronPDF" es una opción adicional. Podemos elegir y descargar el paquete necesario de esta lista entre todos los paquetes NuGet asociados con IronPDF.

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 con IronPDF

Considera una situación en la que tienes un conjunto de datos y deseas crear varios documentos PDF de acuerdo con diferentes valores en ese conjunto. Aquí es donde brilla la utilidad de Distinct de LINQ, particularmente cuando se utiliza con IronPDF para crear documentos rápidamente.

Generación de PDF distintos con LINQ y IronPDF

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

En este ejemplo, se obtiene una serie de categorías distintas utilizando el método Distinct para la colección de categorías. Ayuda a eliminar elementos duplicados de una secuencia. A continuación, IronPDF se usa para crear un documento PDF con estos elementos únicos. Este método garantiza que se produzcan documentos PDF separados exclusivamente para categorías únicas.

SALIDA DE LA CONSOLA

C# LINQ Distinct (Cómo funciona para desarrolladores): Figura 3 - Salida de la consola

Resultado PDF generado

C# LINQ Distinct (Cómo funciona para desarrolladores): Figura 4 - Salida en PDF: Informe tecnológico

Para saber más sobre el ejemplo de código de IronPDF para generar PDFs usando HTML, consulta el Ejemplo de Código de IronPDF HTML a PDF.

Conclusión

El método de extensión Distinct de LINQ junto con IronPDF ofrece un mecanismo sólido y eficiente para crear documentos PDF únicos basados ​​en valores. Este método simplifica el código y garantiza una producción de documentos eficaz ya estés trabajando con categorías, etiquetas u otros datos donde se necesitan documentos separados.

Puedes desarrollar una solución confiable y expresiva para gestionar diferentes aspectos de tus aplicaciones C# utilizando LINQ para el procesamiento de datos e IronPDF para la producción de documentos. Al usar estas estrategias para tus proyectos, ten en cuenta las necesidades particulares de tu aplicación y ajusta la implementación para lograr la máxima confiabilidad y rendimiento.

Preguntas Frecuentes

¿Cómo puedo eliminar entradas duplicadas de una colección en C#?

Puede usar el método Distinct de LINQ para eliminar entradas duplicadas de una colección en C#. Este método es particularmente útil cuando se combina con IronPDF para generar documentos PDF únicos a partir de categorías de datos distintas.

¿Cómo convierto HTML a PDF en C#?

Para convertir HTML a PDF en C#, puede usar el método RenderHtmlAsPdf de IronPDF. Esto le permite convertir cadenas o archivos HTML en documentos PDF de manera eficiente.

¿Puedo usar el método Distinct de LINQ con objetos personalizados?

Sí, puede usar el método Distinct de LINQ con objetos personalizados proporcionando un comparador de igualdad personalizado. Esto es útil cuando necesita definir criterios específicos para determinar la unicidad en su proceso de generación de PDF con IronPDF.

¿Cuál es el beneficio de usar LINQ con IronPDF?

Usar LINQ con IronPDF permite a los desarrolladores crear documentos PDF únicos y eficientes basados en el procesamiento de datos. Mejora la legibilidad y el rendimiento del código, especialmente al gestionar tareas de generación de documentos a gran escala.

¿Cómo puede el método Distinct de LINQ mejorar la creación de documentos PDF?

El método Distinct de LINQ puede mejorar la creación de documentos PDF asegurando que solo las entradas únicas se incluyan en el resultado final. Este método puede usarse junto con IronPDF para generar documentos PDF distintos para varias categorías de datos.

¿Es posible personalizar la salida de PDF al usar IronPDF?

Sí, IronPDF ofrece varias opciones para personalizar la salida de PDF, incluyendo el ajuste de tamaños de página, márgenes y la adición de encabezados o pies de página. Esta personalización se puede combinar con LINQ para crear salidas de documentos adaptadas y únicas.

¿Qué escenarios pueden beneficiarse del uso del método Distinct de LINQ con PDFs?

Escenarios como la generación de informes, facturas o cualquier documento que requiera unicidad a partir de un conjunto de datos pueden beneficiarse del uso del método Distinct de LINQ con PDFs. IronPDF puede utilizarse para producir salidas PDF limpias y distintas de manera eficiente.

¿Cómo mejora LINQ la eficiencia de las aplicaciones PDF basadas en datos?

LINQ mejora la eficiencia de las aplicaciones PDF basadas en datos permitiendo a los desarrolladores filtrar y manipular conjuntos de datos antes de generar PDFs. Esto asegura que solo los datos necesarios y únicos se incluyan en los PDFs, optimizando el rendimiento y el uso de recursos.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, ...

Leer más

Iron Support Team

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