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)
ここで、collection は並べ替えるソース コレクションであり、IEnumerable は要素を並べ替えるプロパティまたは式です。 OrderBy 内のラムダ式はソート基準を指定します。
データを降順にソート
降順で並べ替えるには、メソッドベースの構文を使用して、OrderByDescending メソッドを使用できます。
var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
Dim sortedCollectionDesc = collection.OrderByDescending(Function(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);
Dim multiSortedCollection = collection.OrderBy(Function(item) item.OrderByProperty1).ThenByDescending(Function(item) item.OrderByProperty2)
この例では、コレクションは最初に 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())
ここで、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
この例では、整数のリストは 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
この例では、文字列のリストをアルファベット順に昇順でソートする方法を示します。
カスタムオブジェクトのリストをソート
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
この例では、カスタム Person オブジェクトのリストが、Age プロパティに基づいて昇順に並べ替えられます。
次の出力がコンソールに表示されます。

文字列の比較を処理する
文字列プロパティを扱う際に、大文字小文字を区別しないソートを行いたい場合があります。
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)
この例では、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");
}
}
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パッケージマネージャを使用してインストールできます。
Install-Package IronPdf
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
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
ここではまず、レポートに必要なすべての書式を使用して昇順に並べ替えられた、sortedPeople から HTML 文字列を生成しています。 次に、IronPDFを使用してPDFドキュメントを生成します。 HTML 文字列を PDF ドキュメントに変換するには、RenderHtmlAsPdf メソッドを使用します。
出力
次の出力が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ドキュメントに変換できます。ウェブページの元のレイアウトとスタイルを維持するため、ウェブページのアーカイブや印刷可能バージョンの作成に適しています。




