LINQ-オブジェクト
LINQ to Objectsは、LINQ toSQLまたはLINQto XMLの場合のように、LINQプロバイダー(API)を必要とせずに、メモリ内のデータコレクションにアクセスするためのIEnumerable <T>をサポートするLINQクエリの使用法を提供します。
オブジェクトへのLINQの導入
LINQ to Objectsのクエリは、通常IEnumerable <T>タイプの変数のみを返します。要するに、LINQ to Objectsは以前と同じようにコレクションに新しいアプローチを提供します。コレクションからデータを取得するために、長いコーディング(非常に複雑なforeachループ)を作成することが不可欠でした。これは、目的のデータを明確に説明する宣言コードを作成することで置き換えられました。取得するために必要です。
また、LINQ to Objectsには、読みやすさの向上、強力なフィルタリング、グループ化の機能、最小限のアプリケーションコーディングによる強化された順序付けなど、従来のforeachループに比べて多くの利点があります。このようなLINQクエリは、本質的にコンパクトであり、変更を加えることなく、または少し変更するだけで、他のデータソースに移植できます。
以下は、オブジェクトへの単純なLINQの例です-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQtoObjects {
class Program {
static void Main(string[] args) {
string[] tools = { "Tablesaw", "Bandsaw", "Planer", "Jointer", "Drill", "Sander" };
var list = from t in tools select t;
StringBuilder sb = new StringBuilder();
foreach (string s in list) {
sb.Append(s + Environment.NewLine);
}
Console.WriteLine(sb.ToString(), "Tools");
Console.ReadLine();
}
}
}
この例では、文字列の配列(ツール)が、LINQ toObjectsを使用してクエリされるオブジェクトのコレクションとして使用されています。
Objects query is:
var list = from t in tools select t;
上記のコードをコンパイルして実行すると、次の結果が得られます。
Tablesaw
Bandsaw
Planer
Jointer
Drill
Sander
オブジェクトへのLINQを使用したメモリコレクションでのクエリ
C#
using System;
using System.Collections.Generic;
using System.Linq;
namespace LINQtoObjects {
class Department {
public int DepartmentId { get; set; }
public string Name { get; set; }
}
class LinqToObjects {
static void Main(string[] args) {
List<Department> departments = new List<Department>();
departments.Add(new Department { DepartmentId = 1, Name = "Account" });
departments.Add(new Department { DepartmentId = 2, Name = "Sales" });
departments.Add(new Department { DepartmentId = 3, Name = "Marketing" });
var departmentList = from d in departments
select d;
foreach (var dept in departmentList) {
Console.WriteLine("Department Id = {0} , Department Name = {1}",
dept.DepartmentId, dept.Name);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Imports System.Collections.Generic
Imports System.Linq
Module Module1
Sub Main(ByVal args As String())
Dim account As New Department With {.Name = "Account", .DepartmentId = 1}
Dim sales As New Department With {.Name = "Sales", .DepartmentId = 2}
Dim marketing As New Department With {.Name = "Marketing", .DepartmentId = 3}
Dim departments As New System.Collections.Generic.List(Of Department)(New Department() {account, sales, marketing})
Dim departmentList = From d In departments
For Each dept In departmentList
Console.WriteLine("Department Id = {0} , Department Name = {1}", dept.DepartmentId, dept.Name)
Next
Console.WriteLine(vbLf & "Press any key to continue.")
Console.ReadKey()
End Sub
Class Department
Public Property Name As String
Public Property DepartmentId As Integer
End Class
End Module
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が得られます。
Department Id = 1, Department Name = Account
Department Id = 2, Department Name = Sales
Department Id = 3, Department Name = Marketing
Press any key to continue.