[LINQ] クエリ式(並べ替えをする)

LINQでデータを並べ替える方法について見ていきましょう。


昇順で並べ替える

データを昇順で並べ替えるには VB.NETの場合は Order By, C#の場合は orderby を使用します。

VBの例

Order By 並べ替えのキー Ascending

C#の例

orderby 並べ替えのキー ascending

とします。なお、昇順の場合は Ascending(C#はascending)は省略することができます。

以下は、flowers のデータを昇順で並べ替えます。

VBの例

Dim flowers As String() = {"Rose", "Tulip", "Sunflower"}

Dim data = From name In flowers
           Order By name Ascending
           Select name

C#の例

string[] flowers = { "Rose", "Tulip", "Sunflower" };

var data = from name in flowers
           orderby name ascending
           select name;

降順で並べ替える

データを降順で並べ替えるには Order By に Descendingを指定します。(C#の場合は orderby に descending)
VBの例

Order By 並べ替えのキー Decending

C#の例

orderby 並べ替えのキー decending

とします。
以下は、flowersのデータを降順で並べ替えます。

VBの例

Dim flowers As String() = {"Rose", "Tulip", "Sunflower"}

Dim data = From name In flowers
           Order By name Descending
           Select name

C#の例

string[] flowers = { "Rose", "Tulip", "Sunflower" };

var data = from name in flowers
           orderby name descending
           select name;

[LINQ] クエリ式(Like検索をする)

LINQでSQLでいうLike検索を行う方法について見ていきましょう。


XXを含むデータを抽出する

あるデータ群の中から、「XXが含まれるデータのみを抽出したい」という場合には Containsメソッドを使用します。

たとえば、以下の例では flowers データの中から “flo” という文字列を含むデータのみを抽出します。

VBの例

Dim flowers As String() = {"Rose", "Tulip", "Sunflower"}

Dim data = From name In flowers
           Where name.Contains("flo")
           Select name

C#の例

string[] flowers = { "Rose", "Tulip", "Sunflower" };

var data = from name in flowers
           where name.Contains("flo")
           select name;

 

XXで始まるデータを抽出する

あるデータ群の中から、「XXで始まるデータのみを抽出したい」という場合にはStartsWithメソッドを使用します。

たとえば、以下の例では flowers データの中から “Tu” で始まるデータのみを抽出します。

VBの例

Dim flowers As String() = {"Rose", "Tulip", "Sunflower"}

Dim data = From name In flowers
           Where name.StartsWith("Tu")
           Select name

C#の例

string[] flowers = { "Rose", "Tulip", "Sunflower" };

var data = from name in flowers
           where name.StartsWith("Tu")
           select name;

XXで終わるデータを抽出する 

あるデータ群の中から、「XXで終わるデータのみを抽出したい」という場合にはEndsWithメソッドを使用します。

たとえば、以下の例では flowers データの中から “se” で始まるデータのみを抽出します。

VBの例

Dim flowers As String() = {"Rose", "Tulip", "Sunflower"}

Dim data = From name In flowers
           Where name.EndsWith("se")
           Select name

C#の例

string[] flowers = { "Rose", "Tulip", "Sunflower" };

var data = from name in flowers
           where name.EndsWith("se")
           select name;

[LINQ] クエリ式(複数条件を指定してデータを取得する)

LINQのクエリ式で複数の条件を指定する方法について見ていきましょう。


Andを使用する

Andは「かつ」を意味します。

VBの場合は「And」、C#の場合は「&」を使用します。

以下は3以上 かつ 5以下のデータを取得します。

VBの例

Dim numbers() As Integer = {3, 5, 2, 1, 9, 8, 7}

Dim data = From num In numbers
           Where num >= 3 And num <= 5
           Select num

C#の例

int[] numbers = { 3, 5, 2, 1, 9, 8, 7 };

var data = from num in numbers
           where num >= 3 & num <= 7
           select num;

ショートサーキットも使用可能です。

VBの場合は AndAlso, C#は&&を使用します。

VBの例

Dim numbers() As Integer = {3, 5, 2, 1, 9, 8, 7}

Dim data = From num In numbers
           Where num >= 3 AndAlso num <= 5
           Select num

C#の例

int[] numbers = { 3, 5, 2, 1, 9, 8, 7 };

var data = from num in numbers
           where num >= 3 && num <= 7
           select num;

 


 Orを使用する

Orは「または」を意味します。

VBの場合は「Or」、C#の場合は「|」を使用します。

以下は3以下 または 5以上のデータを取得します。

VBの例

Dim numbers() As Integer = {3, 5, 2, 1, 9, 8, 7}

Dim data = From num In numbers
           Where num <= 3 Or num >= 8
           Select num

C#の例

int[] numbers = { 3, 5, 2, 1, 9, 8, 7 };

var data = from num in numbers
           where num <= 3 | num >= 8
           select num;

foreach (var item in data)
{
    Console.WriteLine(item);
}

ショートサーキットも使用可能です。

VBの場合は OrElse, C#は||を使用します。
VBの例

Dim numbers() As Integer = {3, 5, 2, 1, 9, 8, 7}

Dim data = From num In numbers
           Where num <= 3 OrElse num >= 8
           Select num

C#の例

int[] numbers = { 3, 5, 2, 1, 9, 8, 7 };

var data = from num in numbers
           where num <= 3 || num >= 8
           select num;

foreach (var item in data)
{
    Console.WriteLine(item);
}