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

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

実行例

[LINQ] クエリ式(クエリ結果)

LINQによるクエリ結果は、IEnumerable(Of T)型(またはその派生型)です。

よって、クエリ結果は For Each(C#は foreach)で処理ができます。

IEnumerable(Of T)のデータ型は、対象となるデータソースによって変わってきます。


 

たとえば以下の例は、データソースはInteger型(C#はint型)であり、取得している要素も Integer型のため、取得結果のデータ型はIEnumerable(Integer)になります。

VBの例

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

Dim data = From num In numbers
           Select num

C#の例

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

var data = from num in numbers
           select num;

次に、以下の例を見てみましょう。
データソースはString型(C#はstring型)で、取得している要素もstring型のため、取得結果のデータ型はIEnumerable(string)になります。

VBの例

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

Dim data = From name In flowers
           Select name

C#の例

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

var data = from name in flowers
           select name;

最後に、以下の例を見てみましょう。

データソースはString型(C#はstring型)ですが、取得している要素は String型とIntegert型(C#のstring型とint型)なので、2つのプロパティからなるデータ型になります。
このような2つのオブジェクトを持つデータ型は存在しないため、コンパイラは自動的に型を生成します。
このようなデータ型を匿名型といいます。

匿名型はVB.NETの場合は Dim 変数名、 C#の場合は varで宣言することができます。