
C# Orderby(開発者向けの動作方法)
ソートはどのプログラミング言語においても基本的な操作であり、C#のOrderByメソッドはコレクション内の要素を整理するための強力なツールです。 配列、リスト、またはその他の列挙可能な構造を扱う際に、OrderByを活用する方法を理解することで、コードの可読性と機能性を大幅に向上させることができます。
この記事の後半では、Iron SoftwareのIronPDFライブラリを紹介し、LINQのOrderByメソッドとIronPDFを使用してフォーマットされたソート済みPDFを生成する方法について説明します。
LINQ OrderByメソッドとは何ですか?
このOrderByメソッドは、C#のLINQ(Language-Integrated Query)ライブラリの一部であり、要素を昇順でソートするように特別に設計されています。 データをソートするデフォルトの方法であるため、昇順であることを示すキーワードは必要ありません。
LINQ OrderByメソッドの使用方法
データを昇順にソート
C#では、このメソッドを適用する方法が2つあります:メソッドシンタックスとクエリシンタックスです。 私たちは、シンプルであるためメソッドシンタックスを使用します。
var sortedCollection = collection.OrderBy(item => item.OrderByProperty);Dim sortedCollection = collection.OrderBy(Function(item) item.OrderByProperty)ここで、OrderByPropertyは要素を注文したいプロパティまたは式です。 OrderBy内のラムダ式は、ソート基準を指定します。
データを降順にソート
降順でソートするには、メソッドベースの構文を使用してOrderByDescendingメソッドを使うことができます。
var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);Dim sortedCollectionDesc = collection.OrderByDescending(Function(item) item.OrderByProperty)複数の基準でデータをソート
現実世界のシナリオでは、複数の基準に基づいてコレクションをソートする必要があることがよくあります。 ThenByDescending呼び出しをチェインすることでこれを可能にします。
var multiSortedCollection = collection
.OrderBy(item => item.OrderByProperty1)
.ThenByDescending(item => item.OrderByProperty2);Dim multiSortedCollection = collection.OrderBy(Function(item) item.OrderByProperty1).ThenByDescending(Function(item) item.OrderByProperty2)この例では、コレクションは最初にOrderByProperty1で昇順にソートされます。 次に、同じOrderByProperty2で降順にソートされます。
カスタム比較子
より複雑なソート要件のために、カスタム比較子を使用することができます。 IComparer<t>実装を渡すことができます。
var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());Dim customSortedCollection = collection.OrderBy(Function(item) item.Property, New 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);
}
}
}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この例では、整数のリストは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);
}
}
}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この例では、文字列のリストをアルファベット順に昇順でソートする方法を示します。
カスタムオブジェクトのリストをソート
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この例では、カスタムAgeプロパティに基づいて昇順にソートされます。
次の出力がコンソールに表示されます。

文字列の比較を処理する
文字列プロパティを扱う際に、大文字小文字を区別しないソートを行いたい場合があります。
var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);Dim sortedPeopleByName = people.OrderBy(Function(person) person.LastName, StringComparer.OrdinalIgnoreCase)この例では、LastNameプロパティに基づく大文字小文字を区別しないソートを実行します。
パフォーマンスの考慮事項
LINQはコレクションをソートするための簡潔な方法を提供しますが、大規模なデータセットではパフォーマンスの影響を考慮することが重要です。 パフォーマンスがクリティカルなシナリオでは、List<t>.Sortメソッドを使用してインプレースでソートするなどの代替手段を検討することができます。
IronPDFの紹介
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");
}
}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インストール
IronPDFはNuGetパッケージマネージャコンソールを使用して、またはVisual Studioパッケージマネージャを使用してインストールできます。
NuGetパッケージマネージャーを使用して、検索バーに"IronPDF"と入力することで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
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Linq
Class Person
Public Property FirstName As String
Public Property LastName As String
Public Property Age As Integer
End Class
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 As New ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf")
End Sub
End Classここでは、sortedPeopleからHTML文字列を生成し、レポートに必要なすべてのフォーマットで昇順にソートしています。 次に、IronPDFを使用してPDFドキュメントを生成します。 HTML文字列をPDFドキュメントに変換するためにRenderHtmlAsPdfメソッドを使用します。
出力
次の出力がPDFに表示されます。

ライセンス (無料トライアル利用可能)
IronPDF Trial Licenseからトライアルキーを取得できます。 このキーはappsettings.jsonに配置する必要があります。
"IronPdf.LicenseKey": "your license key"
トライアルライセンスを取得するには、メールアドレスを提供してください。
結論
C#のOrderByメソッドは、さまざまな基準でコレクションをソートするための柔軟なツールです。 昇順または降順、単一または複数の基準、またはカスタム比較子を使用するかどうかにかかわらず、OrderByを習得することでコードの明快さと効率性を大幅に向上させることができます。
PDFドキュメントを生成するためのIronPDFライブラリとともに、美しくフォーマットされたソート済みのコレクションをドキュメントとして生成するための素晴らしい組み合わせです。

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


