データ型の変換
変換メソッドは、入力オブジェクトの型を変更します。
LINQ クエリの変換演算は、さまざまなアプリケーションで役立ちます。次にいくつかの例を示します。
Enumerable.AsEnumerable<TSource> メソッドを使用すると、型で定義されている標準クエリ演算子のカスタム実装を隠ぺいできます。
Enumerable.OfType<TResult> メソッドを使用すると、パラメーター化されていないコレクションを LINQ クエリで使用できるようになります。
Enumerable.ToArray<TSource>、Enumerable.ToDictionary、Enumerable.ToList<TSource>、および Enumerable.ToLookup の各メソッドを使用すると、クエリが列挙されるまで待機せずに、クエリの即時実行を強制できます。
メソッド
次の表は、データ型の変換を行う標準クエリ演算子メソッドの一覧です。
この表の変換メソッドのうち、名前の先頭に "As" が付くものは、ソース コレクションの静的な型を変更しますが、コレクションの列挙は行いません。名前の先頭に "To" が付くメソッドは、ソース コレクションを列挙し、それらの項目を対応するコレクション型に変換します。
メソッド名 |
Description |
C# のクエリ式の構文 |
Visual Basic のクエリ式の構文 |
詳細情報 |
---|---|---|---|---|
AsEnumerable |
IEnumerable<T> として型指定された入力を返します。 |
該当なし |
該当なし |
|
AsQueryable |
IEnumerable (ジェネリック) を IQueryable (ジェネリック) に変換します。 |
該当なし |
該当なし |
|
Cast |
コレクションの要素を指定された型にキャストします。 |
明示的に型指定された範囲変数を使用します。次に例を示します。 from string str in words |
From … As … |
|
OfType |
指定された型にキャストできるかどうかを基準として、値をフィルター処理します。 |
該当なし |
該当なし |
|
ToArray |
コレクションを配列に変換します。このメソッドはクエリを強制実行します。 |
該当なし |
該当なし |
|
ToDictionary |
キー セレクター関数に基づき、要素を Dictionary<TKey, TValue> に変換します。このメソッドはクエリを強制実行します。 |
該当なし |
該当なし |
|
ToList |
コレクションを List<T> に変換します。このメソッドはクエリを強制実行します。 |
該当なし |
該当なし |
|
ToLookup |
キー セレクター関数に基づき、要素を Lookup<TKey, TElement> (一対多のディクショナリ) に変換します。このメソッドはクエリを強制実行します。 |
該当なし |
該当なし |
クエリ式の構文の例
次のコード例では、明示的に型指定された範囲変数 (C#) または From As 句 (Visual Basic) を使用して、サブタイプでのみ使用できるメンバーにアクセスする前に、型をそのサブタイプにキャストします。
Class Plant
Public Property Name As String
End Class
Class CarnivorousPlant
Inherits Plant
Public Property TrapType As String
End Class
Sub Cast()
Dim plants() As Plant = {
New CarnivorousPlant With {.Name = "Venus Fly Trap", .TrapType = "Snap Trap"},
New CarnivorousPlant With {.Name = "Pitcher Plant", .TrapType = "Pitfall Trap"},
New CarnivorousPlant With {.Name = "Sundew", .TrapType = "Flypaper Trap"},
New CarnivorousPlant With {.Name = "Waterwheel Plant", .TrapType = "Snap Trap"}}
Dim query = From plant As CarnivorousPlant In plants
Where plant.TrapType = "Snap Trap"
Select plant
Dim sb As New System.Text.StringBuilder()
For Each plant In query
sb.AppendLine(plant.Name)
Next
' Display the results.
MsgBox(sb.ToString())
' This code produces the following output:
' Venus Fly Trap
' Waterwheel Plant
End Sub
class Plant
{
public string Name { get; set; }
}
class CarnivorousPlant : Plant
{
public string TrapType { get; set; }
}
static void Cast()
{
Plant[] plants = new Plant[] {
new CarnivorousPlant { Name = "Venus Fly Trap", TrapType = "Snap Trap" },
new CarnivorousPlant { Name = "Pitcher Plant", TrapType = "Pitfall Trap" },
new CarnivorousPlant { Name = "Sundew", TrapType = "Flypaper Trap" },
new CarnivorousPlant { Name = "Waterwheel Plant", TrapType = "Snap Trap" }
};
var query = from CarnivorousPlant cPlant in plants
where cPlant.TrapType == "Snap Trap"
select cPlant;
foreach (Plant plant in query)
Console.WriteLine(plant.Name);
/* This code produces the following output:
Venus Fly Trap
Waterwheel Plant
*/
}
参照
処理手順
方法 : LINQ を使用して ArrayList を照会する