フッターコンテンツにスキップ
.NETヘルプ

C# LINQ Distinct(開発者向けの動作方法)

C# の強力な言語機能である言語統合クエリ (LINQ) により、プログラマはさまざまなデータ ソースに対して明確で表現力豊かなクエリを作成できます。 この投稿では、IronPDF の使用法について、PDF ドキュメントを操作するための多用途な C# ライブラリとともに、LINQ の Distinct 関数を使用する方法について説明します。 この組み合わせがどのようにしてコレクションからユニークなドキュメントを作成するプロセスを簡素化できるかを示します。 この記事では、IronPDFとともにC# LINQ distinct関数について学びます。

C# LINQ Distinct メソッドの使用方法

  1. 新しいコンソールプロジェクトを作成します。
  2. System.Linq 名前空間をインポートします。
  3. 複数のアイテムを含むリストを作成します。
  4. リストからメソッド Distinct() を呼び出します。
  5. ユニークな値を取得し、結果をコンソールに表示します。
  6. 作成したすべてのオブジェクトを破棄します。

LINQとは何か

開発者は、C# の LINQ (Language Integrated Query) 機能を使用して、コード内で直接データ操作のための明確で表現力豊かなクエリを作成できます。 .NET Framework 3.5 に初めて含まれた LINQ は、データベースやコレクションを含むさまざまなデータ ソースのクエリを実行するための標準構文を提供します。 LINQ では、WhereSelect などの演算子を使用して、フィルタリングや投影などの単純なタスクが簡単に実行できるため、コードの読みやすさが向上します。 この機能により、最適な速度で遅延実行が可能なため、データ操作の操作が迅速かつ SQL に類似した自然な方法で完了することを保証するために、C# 開発者にとって非常に重要です。

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

特定のプロパティによる Distinct

オブジェクトを操作するときは、特定の属性で区別するためのロジックを作成するか、サードパーティのライブラリ (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

プログラマーは .NET ライブラリ IronPDF ウェブサイト の援助を得て、C# 言語で PDF ドキュメントを作成、編集、変更することができます。 このプログラムは、HTML からの PDF の生成、HTML から PDF への変換、PDF ドキュメントのマージまたは分割、既存の PDF へのテキスト、画像、注釈の追加などの PDF ファイルに関するさまざまなタスクを可能にするさまざまなツールと機能を提供します。 IronPDF について詳しくは、IronPDF ドキュメント を参照してください。

IronPDF の主な機能は、HTML から PDF への変換で、レイアウトとスタイルを保持します。 Web コンテンツから 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 ドキュメントを 1 つのファイルにマージしたり、既存の PDF を編集したりできます。
  • PDF フォーム: このライブラリにより、PDF フォームを作成および記入でき、フォームデータを収集および処理する必要がある状況で役立ちます。
  • セキュリティ機能: IronPDF は PDF ドキュメントを暗号化し、パスワードと権限保護を提供するために使用できます。
  • テキスト抽出: 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

パッケージ "IronPDF" を検索するために NuGet パッケージ マネージャーを使用するという追加の選択肢があります。 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.

IronPDF での LINQ

特定のデータ セットを持っており、そのセット内の異なる値に基づいてさまざまな 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 出力: テクノロジー レポート

IronPDF を使用して HTML で PDF を生成するためのコード例について詳しくは、IronPDF HTML to 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 メソッドはカスタムの等価比較子を提供することでカスタムオブジェクトでも使用できます。これは、IronPDF を使用して PDF 生成プロセスで一意性を判断するための特定の基準を定義する必要がある場合に有用です。

LINQ を IronPDF と組み合わせて使用する利点は何ですか?

LINQ を IronPDF と組み合わせて使用することで、開発者はデータ処理に基づいたユニークで効率的な PDF ドキュメントを作成できます。特に大規模なドキュメント生成タスクを管理する際に、コードの読みやすさとパフォーマンスが向上します。

LINQ の Distinct メソッドは PDF ドキュメントの作成をどう向上させますか?

LINQ の Distinct メソッドは、最終出力に一意のエントリのみが含まれるようにすることで PDF ドキュメントの作成を向上させます。このメソッドは、さまざまなデータカテゴリーの異なる PDF ドキュメントを生成するために IronPDF と組み合わせて使用できます。

IronPDF 使用時にPDF出力をカスタマイズすることは可能ですか?

はい、IronPDF ではページサイズ、マージン、ヘッダーやフッターの追加など、PDF 出力をカスタマイズするための様々なオプションが提供されています。このカスタマイズは、LINQ を組み合わせて使用することで、独自のドキュメント出力を作成することができます。

どのようなシナリオで LINQ の Distinct メソッドを PDF に使用する効果があるでしょうか?

レポート生成、請求書、またはデータセットからの一意性を必要とする任意の文書を生成するシナリオは、LINQ の Distinct メソッドを使って PDF を作成することで効果を受けます。IronPDF を活用して、クリーンで独自の PDF 出力を効率的に生成することが可能です。

LINQ はデータ駆動型 PDF アプリケーションの効率をどのように向上させますか?

LINQ は開発者がデータセットをフィルタリングし、操作した後に PDF を生成することができるため、データ駆動型 PDF アプリケーションの効率を向上させます。これにより、必要で一意のデータのみが PDF に含まれるため、パフォーマンスとリソースの使用が最適化されます。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

彼の主要なIronPDFとIron Suite .NETライブラリは、世界中で3000万以上のNuGetインストールを達成し、彼の基礎となるコードは世界中で使用されている開発者ツールに力を与え続けています。25年の商業経験と41年のコーディングの専門知識を持つJacobは、次世代の技術リーダーを指導しながら、エンタープライズグレードのC#、Java、Python PDFテクノロジーにおけるイノベーションの推進に注力しています。

Iron Support Team

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