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

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

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

この記事の後半では、Iron SoftwareのIronPDFライブラリを紹介し、LINQのOrderByメソッドとIronPDFを使用してフォーマットされたソート済みPDFを生成する方法について説明します。

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

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

LINQ OrderByメソッドの使用方法

データを昇順にソート

C#では、このメソッドを適用する方法が2つあります:メソッドシンタックスとクエリシンタックスです。 私たちは、シンプルであるためメソッドシンタックスを使用します。

var sortedCollection = collection.OrderBy(item => item.OrderByProperty);
var sortedCollection = collection.OrderBy(item => item.OrderByProperty);
Dim sortedCollection = collection.OrderBy(Function(item) item.OrderByProperty)
$vbLabelText   $csharpLabel

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

データを降順にソート

降順にソートするには、メソッドベースのシンタックスを使用してOrderByDescendingメソッドを使用できます。

var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
Dim sortedCollectionDesc = collection.OrderByDescending(Function(item) item.OrderByProperty)
$vbLabelText   $csharpLabel

複数の基準でデータをソート

現実世界のシナリオでは、複数の基準に基づいてコレクションをソートする必要があることがよくあります。 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);
Dim multiSortedCollection = collection.OrderBy(Function(item) item.OrderByProperty1).ThenByDescending(Function(item) item.OrderByProperty2)
$vbLabelText   $csharpLabel

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

カスタム比較子

より複雑なソート要件のために、カスタム比較子を使用することができます。 OrderByメソッドは次の例に示すようにIComparer<T>の実装を渡すことができます。

var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());
var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());
Dim customSortedCollection = collection.OrderBy(Function(item) item.Property, New CustomComparer())
$vbLabelText   $csharpLabel

ここで、CustomComparerは要素を比較するためのカスタムロジックを提供するIComparer<T>インターフェースを実装したクラスです。

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

整数のリストをソート

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);
        }
    }
}
Imports System
Imports System.Linq
Imports System.Collections.Generic

Friend Class Program
	Shared Sub Main()
		Dim numbers As New List(Of Integer) From {5, 2, 8, 1, 7}
		Dim sortedNumbers = numbers.OrderBy(Function(num) num)
		Console.WriteLine("Sorted Numbers:")
		For Each number In sortedNumbers
			Console.WriteLine(number)
		Next number
	End Sub
End Class
$vbLabelText   $csharpLabel

この例では、整数リストが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);
        }
    }
}
Imports System
Imports System.Linq
Imports System.Collections.Generic

Friend Class Program
	Shared Sub Main()
		Dim names As New List(Of String) From {"Alice", "Charlie", "Bob", "David"}
		Dim sortedNames = names.OrderBy(Function(name) name)
		Console.WriteLine("Sorted Names:")
		For Each name In sortedNames
			Console.WriteLine(name)
		Next name
	End Sub
End Class
$vbLabelText   $csharpLabel

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

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

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}");
        }
    }
}
Imports System
Imports System.Linq
Imports System.Collections.Generic

Friend Class Person
	Public Property FirstName() As String
	Public Property LastName() As String
	Public Property Age() As Integer
End Class

Friend Class Program
	Shared Sub Main()
		Dim people As New List(Of Person) From {
			New Person With {
				.FirstName = "John",
				.LastName = "Doe",
				.Age = 30
			},
			New Person With {
				.FirstName = "Alice",
				.LastName = "Smith",
				.Age = 25
			},
			New Person With {
				.FirstName = "Bob",
				.LastName = "Johnson",
				.Age = 35
			}
		}
		Dim sortedPeople = people.OrderBy(Function(person) person.Age)
		Console.WriteLine("Sorted People by Age:")
		For Each person In sortedPeople
			Console.WriteLine($"{person.FirstName} {person.LastName}, Age: {person.Age}")
		Next person
	End Sub
End Class
$vbLabelText   $csharpLabel

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

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

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

文字列の比較を処理する

文字列プロパティを扱う際に、大文字小文字を区別しないソートを行いたい場合があります。

var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);
var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);
Dim sortedPeopleByName = people.OrderBy(Function(person) person.LastName, StringComparer.OrdinalIgnoreCase)
$vbLabelText   $csharpLabel

この例ではStringComparer.OrdinalIgnoreCaseを使用して、LastNameプロパティに基づいた大文字小文字を無視するソートを行います。

パフォーマンスへの考慮

LINQはコレクションをソートするための簡潔な方法を提供しますが、大規模なデータセットではパフォーマンスの影響を考慮することが重要です。 パフォーマンスが重要なシナリオでは、List<T>.Sortメソッドを使用したインプレースでのソートのような代替案を検討することができます。

IronPDFの紹介

Discover IronPDF capabilities within the C# PDF library from C# PDFライブラリ内のIronPDFの機能を発見してください。これはPDF文書の読み取りと生成を支援します。 それはスタイル情報を持つフォーマットされた文書を簡単に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");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

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

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

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

インストール

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

Install-Package IronPdf

NuGetパッケージマネージャで"ironpdf"という名前を検索してIronPDFをインストールすることもできます。

C# Orderby (開発者向け動作ガイド):図2 - NuGetパッケージマネージャを通じてIronPDFのインストール

IronPDFを使用してPDFを生成する

以下はHTML文字列とIronPDFジェネレーターを使用してPDFレポートを生成するコードです。

// See https://aka.ms/new-console-template for more information

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

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

        // Sort people by age
        var sortedPeople = people.OrderBy(person => person.Age);

        string name = "Sam";
        var count = people.Count;

        // Generate an HTML string
        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 and save it
        var pdfDocument = new ChromePdfRenderer();
        pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf");
    }
}
// See https://aka.ms/new-console-template for more information

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

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

        // Sort people by age
        var sortedPeople = people.OrderBy(person => person.Age);

        string name = "Sam";
        var count = people.Count;

        // Generate an HTML string
        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 and save it
        var pdfDocument = new ChromePdfRenderer();
        pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf");
    }
}
' See https://aka.ms/new-console-template for more information

Imports Microsoft.VisualBasic
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Linq

Friend Class Person
	Public Property FirstName() As String
	Public Property LastName() As String
	Public Property Age() As Integer
End Class

Friend Class Program
	Shared Sub Main()
		Dim people As New List(Of Person) From {
			New Person With {
				.FirstName = "John",
				.LastName = "Doe",
				.Age = 30
			},
			New Person With {
				.FirstName = "Alice",
				.LastName = "Smith",
				.Age = 25
			},
			New Person With {
				.FirstName = "Bob",
				.LastName = "Johnson",
				.Age = 35
			}
		}

		' Sort people by age
		Dim sortedPeople = people.OrderBy(Function(person) person.Age)

		Dim name As String = "Sam"
		Dim count = people.Count

		' Generate an HTML string
		Dim content As String = $"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} people sorted by Age.</p>
" & String.Join(vbLf, sortedPeople.Select(Function(person) $"{person.FirstName} {person.LastName}, Age: {person.Age}")) & "
</body>
</html>"

		' Create a new PDF document and save it
		Dim pdfDocument = New ChromePdfRenderer()
		pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

ここではsortedPeopleから昇順にソートされたHTML文字列を生成し、レポートに必要なすべてのフォーマットを行います。 次に、IronPDFを使用してPDFドキュメントを生成します。 RenderHtmlAsPdfメソッドを使用してHTML文字列をPDFドキュメントに変換します。

出力

次の出力がPDFに表示されます。

C# Orderby (開発者向け動作ガイド):図3 - 前述のコードからのPDF出力

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

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

"IronPdf.LicenseKey": "your license key"

トライアルライセンスを取得するには、メールアドレスを提供してください。

結論

C#のOrderByメソッドは、さまざまな基準でコレクションをソートするための柔軟なツールです。 昇順または降順、単一または複数の基準、またはカスタム比較子を使用するかどうかにかかわらず、OrderByを習得することでコードの明快さと効率性を大幅に向上させることができます。

PDFドキュメントを生成するためのIronPDFライブラリとともに、美しくフォーマットされたソート済みのコレクションをドキュメントとして生成するための素晴らしい組み合わせです。

よくある質問

C#のOrderByメソッドはどのように機能しますか?

C#のOrderByメソッドは、LINQライブラリの一部で、コレクションの要素を昇順にソートします。メソッド構文とクエリ構文の両方で使用可能で、整数、文字列、カスタムオブジェクトを扱うのに十分汎用的です。

C#でデータを降順にソートする方法は?

C#でデータを降順にソートするには、OrderByDescendingメソッドを使用できます。これはLINQライブラリの一部で、異なるソートニーズに応じてOrderByを補完します。

C#で複数のフィールドでソートすることは可能ですか?

はい、C#ではOrderByとThenByまたはThenByDescendingを組み合わせることで複数のフィールドでソートできます。これにより、複数の属性に基づいてコレクションをソートするための複雑なソート基準が可能になります。

カスタムコンパレータとは何であり、C#のソートでどのように使用されますか?

C#のカスタムコンパレータとは、IComparerインターフェースの実装であり、ソート中に要素を比較するためのカスタムロジックを提供します。これは、デフォルトのソート動作が特定の要件を満たさない場合や複雑なオブジェクトをソートする場合に役立ちます。

C#でIronPDFを使用してPDFを生成するにはどうすればよいですか?

C#でIronPDFを使用して、HTML文字列、ファイル、またはウェブURLからPDFを生成できます。IronPDFは元のコンテンツのレイアウトとスタイルを維持し、レポートや請求書などのプロフェッショナルなドキュメントの作成に最適です。

C#プロジェクトにIronPDFをインストールする手順は何ですか?

IronPDFはNuGetパッケージマネージャーを使用してC#プロジェクトにインストールできます。コンソールでdotnet add package IronPdfコマンドを実行するか、Visual Studioのパッケージマネージャーを使用してプロジェクトに追加できます。

IronPDFは、PDF生成のためにC#のOrderByとどのように統合されますか?

IronPDFはC#のOrderByと統合して、ソートされたフォーマットのPDFレポートを作成できます。レンダリング前にデータコレクションをOrderByでソートすることで、PDF出力がソート基準に準拠して整理されます。

IronPDFはウェブページのURLをPDFに変換できますか?

はい、IronPDFはURLからのウェブコンテンツをPDFドキュメントに変換できます。ウェブページの元のレイアウトとスタイルを維持するため、ウェブページのアーカイブや印刷可能バージョンの作成に適しています。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。