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

[LINQ] クエリ式(Where句で使える演算子)

Where句で使える演算子について見ていきましょう。


等しいデータを取得する

何かと等しいデータのみを取得するには VBの場合は = 、C#の場合は == を使用します。

以下は、データソース flowers から nameが”Tulip”のデータを取得する例です。

VBの例

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

Dim data = From name In flowers
           Where name = "Tulip"
           Select name, name.Length

C#の例

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

var data = from name in flowers
           where name == "Tulip"
           select new { name, name.Length };

〜より大きいデータを取得する

特定の値より大きいデータを取得するには  > を使用します。

以下はデータソース numbersから 5よりデータを取得する例です。

VBの例

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

Dim data = From num In numbers
           Where num > 5
           Select num

C#の例

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

var data = from num in numbers
           where num > 5
           select num;

〜以上のデータを取得する

特定の値以上のデータを取得するには >= を使用します。

VBの例

Dim data = From num In numbers
           Where num >= 5
           Select num

C#の例

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

var data = from num in numbers
           where num >= 5
           select num;

〜未満のデータを取得する

特定の値未満のデータを取得するには < を使用します。

以下はデータソース numbersから 5未満のデータを取得する例です。

VBの例

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

Dim data = From num In numbers
           Where num < 5
           Select num

C#の例

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

var data = from num in numbers
           where num < 5
           select num;

〜以下のデータを取得する

特定の値以下のデータを取得するには <= を使用します。

以下はデータソース numbersから 5以下のデータを取得する例です。
VBの例

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

Dim data = From num In numbers
           Where num <= 5
           Select num

C#の例

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

var data = from num in numbers
           where num <= 5
           select num;

[LINQ] クエリ式(Where句)

クエリ式でデータを取得する条件を指定したい場合は Where句を使用します。

Where句は from句と Select句の間に置きます。

構文は以下のとおりです。

VBの例

From 変数 In データソース
Where 条件式
Select 取得するデータ

C#の例

from 変数 in データソース
where 条件式
select 取得するデータ

以下は where句を使用して、取得条件を指定する例です。

where句に num > 5 を指定することで、データソース numbers から 5より大きい値のみを取得します。

VBの例

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

Dim data = From num In numbers
           Where num > 5
           Select num

For Each item In data
    Console.WriteLine(item)
Next

C#の例

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

var data = from num in numbers
           where num > 5
           select num;

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

実行結果は下図の通りです。

実行例