.NET ヘルプ

C# Orderby(開発者向けの仕組み)

ジョルディ・バルディア
ジョルディ・バルディア
2024年2月18日
共有:

整列はどのプログラミング言語でも基本的な操作であり、C#のOrderByメソッドはコレクション内の要素を整理するための強力なツールです。 配列、リスト、その他の列挙可能な構造を扱う際に、OrderByを活用する方法を理解することで、コードの可読性と機能性が大幅に向上します。

この記事の後半では、Iron SoftwareのIronPDFライブラリ私たちがLINQのOrderByメソッドとIronPDFを使用してフォーマットされ並べ替えられたPDFを生成する方法。

LINQ OrderBy メソッドとは何ですか?

OrderBy メソッドは LINQ の一部です。(言語統合クエリ (Language-Integrated Query))C#のライブラリで、特に要素を昇順に並べ替えるように設計されています; データをソートするデフォルトの方法であるため、昇順キーワードは必要ありません。

LINQ OrderByメソッドの使い方

データを昇順にソートする

C#では、メソッド構文とクエリ構文の2つの方法があります。 方法の構文を使用します。これは簡単明瞭だからです。

var sortedCollection = collection.OrderBy(item => item.OrderByProperty);
var sortedCollection = collection.OrderBy(item => item.OrderByProperty);

ここで、コレクションはソートしたい IEnumerable ソースコレクションであり、OrderByProperty は要素を並べ替えたいプロパティや式です。 OrderBy 内のラムダ式拡張メソッドは、ソートの基準を指定します。

データを降順で並べ替える

降順で並べ替えるには、メソッドベースの構文を使用して OrderByDescending メソッドを使用できます。

var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);

複数の基準によるデータの並べ替え

実際のシナリオでは、複数の条件に基づいてコレクションをソートする必要がよくあります。 OrderByは、複数のThenByまたはThenByDescending呼び出しをチェーンすることでこれを可能にします:

var multiSortedCollection = collection
    .OrderBy(item => item.OrderByProperty1)
    .ThenByDescending(item => item.OrderByProperty2);
var multiSortedCollection = collection
    .OrderBy(item => item.OrderByProperty1)
    .ThenByDescending(item => item.OrderByProperty2);

この例では、コレクションはまず OrderByProperty1 で昇順にソートされます。 次に、同じOrderByProperty1の値を持つ要素について、降順にOrderByProperty2でソートします。

カスタムコンパレータ

より複雑な並べ替えの要件には、カスタムコンパレータを使用できます。 OrderBy メソッドは、IComparer を渡すことを許可します次の例に示すように、実装を行います:

var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());
var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());

以下は、CustomComparerIComparer を実装するクラスです。interface、要素を比較するためのカスタムロジックを提供します。

実用例:オブジェクトのソート

整数のリストの並べ替え

using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 5, 2, 8, 1, 7 };
        var sortedNumbers = numbers.OrderBy(num => num);
        Console.WriteLine("Sorted Numbers:");
        foreach (var number in sortedNumbers)
        {
            Console.WriteLine(number);
        }
    }
}
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 5, 2, 8, 1, 7 };
        var sortedNumbers = numbers.OrderBy(num => num);
        Console.WriteLine("Sorted Numbers:");
        foreach (var number in sortedNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

この例では、整数のリストが OrderBy を使用して昇順にソートされます。

文字列のリストのソート

using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<string> names = new List<string> { "Alice", "Charlie", "Bob", "David" };
        var sortedNames = names.OrderBy(name => name);
        Console.WriteLine("Sorted Names:");
        foreach (var name in sortedNames)
        {
            Console.WriteLine(name);
        }
    }
}
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<string> names = new List<string> { "Alice", "Charlie", "Bob", "David" };
        var sortedNames = names.OrderBy(name => name);
        Console.WriteLine("Sorted Names:");
        foreach (var name in sortedNames)
        {
            Console.WriteLine(name);
        }
    }
}

この例は、文字列のリストをアルファベット順に昇順でソートする方法を示しています。

カスタムオブジェクトのリストをソートする

using System;
using System.Linq;
using System.Collections.Generic;
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        Console.WriteLine("Sorted People by Age:");
        foreach (var person in sortedPeople)
        {
            Console.WriteLine($"{person.FirstName} {person.LastName}, Age: {person.Age}");
        }
    }
}
using System;
using System.Linq;
using System.Collections.Generic;
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        Console.WriteLine("Sorted People by Age:");
        foreach (var person in sortedPeople)
        {
            Console.WriteLine($"{person.FirstName} {person.LastName}, Age: {person.Age}");
        }
    }
}

この例では、カスタムなPersonオブジェクトのリストが年齢プロパティに基づいて昇順にソートされます。

以下の出力がコンソールに表示されます。

C# Orderby(開発者向けのしくみ):図1 - カスタムオブジェクトをソートする前述のコードの出力

文字列の比較の取り扱い

文字列プロパティを扱う場合、大文字小文字を区別しないソートを保証したいかもしれません:

var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);
var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);

この例では、StringComparer.OrdinalIgnoreCase を使用して、LastName プロパティに基づく大文字と小文字を区別しないソートを実行します。

パフォーマンスに関する考慮事項

LINQはコレクションを整理するための簡潔な方法を提供しますが、特に大規模なデータセットの場合にはパフォーマンスの影響を考慮することが重要です。 パフォーマンスが重要なシナリオでは、Listを使用してその場でソートするような代替案を検討することをお勧めします。.Sort` メソッド。

IronPDFの紹介

IronPDFの機能を見るからのC# PDFライブラリ内。Iron Softwareまた、PDFドキュメントの読み取りと生成を支援する「.NET.NET.NET.NET.NET. スタイル情報を含むフォーマット文書を簡単にPDFに変換できます。 IronPDFはHTML文字列からPDFを生成することもできますし、URLからHTMLをダウンロードしてPDFを生成することもできます。

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

インストール

IronPDFは以下を使用してインストールできますNuGetパッケージマネージャコンソールまたはVisual Studioのパッケージマネージャを使用します。

dotnet add package IronPdf
dotnet add package IronPdf

検索バーで "ironpdf "を検索し、NuGetパッケージマネージャを使ってIronPDFをインストールすることもできます。

C# Orderby(開発者向けの使い方): 図 2 - NuGet パッケージ マネージャーを通じて IronPDF をインストールする

IronPDFを使ってPDFを生成する

下記はHTML文字列とIronPDFジェネレーターを使ってPDFレポートを生成するコードです:

// See https://aka.ms/new-console-template for more information
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        string name = "Sam";
        var count = people.Count;
        string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} people sorted by Age.</p>
" +
string.Join("\n", sortedPeople.Select(person => $"{person.FirstName} {person.LastName}, Age: {person.Age}"))
+ @"
</body>
</html>";
// Create a new PDF document
        var pdfDocument = new ChromePdfRenderer();
        pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf");
    }
}
// See https://aka.ms/new-console-template for more information
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        string name = "Sam";
        var count = people.Count;
        string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} people sorted by Age.</p>
" +
string.Join("\n", sortedPeople.Select(person => $"{person.FirstName} {person.LastName}, Age: {person.Age}"))
+ @"
</body>
</html>";
// Create a new PDF document
        var pdfDocument = new ChromePdfRenderer();
        pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf");
    }
}

ここでは、レポートに必要なすべての書式を含む昇順で並べ替えられた sortedPeople からHTML文字列を最初に生成しています。 次にIronPDFを使用してPDF文書を生成します。 RenderHtmlAsPdf`メソッドを使用して、HTML文字列をPDFドキュメントに変換します。

出力

PDFでは以下の出力が可能です。

C# Orderby(開発者のための動作方法):図3 - 前述のコードから出力されたPDF

ライセンス(無料トライアル利用可能)

試用キーはから取得できますIronPDF トライアルライセンス. このキーはappsettings.jsonに配置する必要があります。

"IronPdf.LicenseKey": "your license key"
"IronPdf.LicenseKey": "your license key"

試用ライセンスを取得するためにメールアドレスを提供してください。

結論

C#のOrderByメソッドは、さまざまな基準に基づいてコレクションをソートするための多用途なツールです。 昇順または降順での並べ替え、単一または複数の基準による並べ替え、またはカスタムコンパレータの使用に関わらず、OrderByを習得することは、コードの明確さと効率を大幅に向上させることができます。

一緒にPDFドキュメントを生成するIronPDFライブラリまた、このようなツールは、美しくフォーマットされ、ソートされたコレクションをドキュメントとして生成するのに最適な組み合わせです。

ジョルディ・バルディア
ソフトウェアエンジニア
ジョルディは、Iron Softwareでのスキルを活かしていないときには、ゲームプログラミングをしており、Python、C#、C++に最も堪能です。彼は製品テスト、製品開発、研究の責任を共有しており、継続的な製品改善に大きな価値をもたらしています。この多様な経験は彼を常に挑戦的で魅力的に保ち、彼はIron Softwareで働く一番好きな側面の一つだと言っています。ジョルディはフロリダ州マイアミで育ち、フロリダ大学でコンピューターサイエンスと統計学を学びました。
< 以前
C# Dev Kit VS Code 拡張機能(開発者向けの動作方法)
次へ >
MSTest C# (開発者向けの動作説明)