簡単なデータ操作を可能にするLINQ

文:Tony Patton(TechRepublic) 翻訳校正:村上雅章・野崎裕子
2008-02-06 08:00:00
  • このエントリーをはてなブックマークに追加

クラスライブラリ

 LINQの機能は専用のクラス群によって提供されている。LINQの主要な名前空間はSystem.Linqであり、ここでは、LINQを使用するクエリをサポートするためのクラス群やインタフェース群が提供されている。また、これ以外に以下のような名前空間も提供されている。

  • System.Linq.Expressions:言語レベルのコード式を式ツリー形式のオブジェクトで表すためのクラス群やインタフェース群、列挙体群が保持されている。
  • System.Data.Linq:LINQからリレーショナルデータベースにアクセスする際のサポートクラス群が提供されている(LINQ to SQL)。
  • System.Data.Linq.Mapping:リレーショナルデータベースシステムを扱うためにSystem.Data.Linqと連携する名前空間である。これによって、データソースの構造と内容を表すオブジェクトモデルを生成することができる。
  • System.Data.Linq.SqlClient:SQL Serverと通信するためのプロバイダクラス群と、クエリにおけるヘルパメソッドを保持したクラス群が提供されている。この名前空間はコード内で直接使用するためのものではない。
  • System.Xml.Linq:XMLデータソースを扱うためのクラス群が保持されている(LINQ to XML)。こういったクラス群を用いることで、XMLデータをファイルやストリームから読み込むだけではなく、XMLツリーの検索や検証、操作を行えるようになる。LINQ to XMLはメモリ内XMLプログラミングインタフェースであり、これを用いることでXMLドキュメントを簡単かつ効率的に変更できるようになる。

 LINQの主な特徴は、IEnumerableやIQueryableを実装した任意のコレクションに対して、完全なクエリ機能を提供するという点にある。メモリ内のオブジェクトをLINQで利用できるようにするには、オブジェクト型にIEnumerableを実装することになる。LINQ to XMLとLINQ to ADO.NETについては、元となるプロバイダによって、対象となるオブジェクトがIEnumerableに基づいたコレクションに変換される。

IEnumerable

 ほとんどすべての.NET型のコンテナはIEnumerableをサポートしており、LINQは、IEnumerableインタフェースを実装したいかなるコレクションとも連携できるという点を考えると、LINQの敷居は低いと言える。C#を用いた以下の例は、LINQを使って文字列の配列を処理する方法を示したものである。IEnumerable文字列を用いることで、文字列配列に含まれるすべての文字列を対象としてループ処理を行っている。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQConsoleTest {
class Program {
static void Main(string[] args) {
string[] words = new string[3] { "TechRepublic.com", "CNET.com", "News.com"};
IEnumerable wordQuery =
from word in words
select word;
foreach (string wrd in wordQuery) {
Console.WriteLine(wrd);
}}}}

 文字列データの処理は有益であるものの、SQL Serverとのやり取りの方がより一般的だろう。Visual Studio 2008には、データベースをLINQ to SQLデータモデルとしてモデル化し、目に見えるかたちにすることを簡単に行えるような設計用ツールが含まれている。データベースの要素は設計環境にドラッグアンドドロップすることができ、その結果はdbmlファイルとして出力される。dbmlファイルは作成や読み込み、更新、削除といったデータ操作用のクラスファイルを生成する。

 さまざまなデータベース機能をデザイナにドラッグアンドロップすると、dbmlファイルに名前が割り当てられる。そして、この名前を用いて元となるデータソースとのやり取りを行うことになる。例として、SQL Server上のNorthwindというデータベース内にあるEmployeesテーブルへの接続を作成した。以下のC#コードはそのデータソースにアクセスするものである。

NorthwindDataContext db = new NorthwindDataContext();
var employees = from p in db.Employees
select p;

 等価なVisual Basicコードは以下のようになる。

Dim db As New NorthwindDataContext
Dim employees = From p in db.Employees

select p;

 なお、次回の記事でコードの詳細をさらに解説するつもりだ。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]