Welcome to MSDN Blogs Sign in | Join | Help

Days with .NET Framework

.NET Framework 担当のプロダクトマーケティング 新村剛史の日記です。
様々なDataSource に対応した LINQ - LINQ to Object 編 - (20071112)

皆様こんにちは
だいぶサボっていましたが、DEMO フォローアップの方を進めてみたいと思います。

まず、LINQ に関してですが、.NET Framework 3.5 の中でももっとも注目を集めている機能です。また、一方で難しいのではないかと心配されている方もいらっしゃるかと思います。
最初に申し上げておきますが、LINQ の概念は一見難しいように見えますが、SQL構文に非常によく似ていて、全く見ず知らずの構文をこれから覚えるというわけではありません。それから、リレーショナルデータベースだけではなく、ADO.NET の DataSet を介したり、 XML ドキュメントや メモリ上のCollection に対しても同じような構文でアクセスを行うことができるのです。逆にいえば、それぞれのデータソースに対して今まではSQL 文 やXPath などといった別々の言語を習得する必要はありません。

ということで、まずはメモリ上にある Collection を操作する方法を解説します。この DEMO では基本的なクエリ表現についてご説明していきます。

まず、処理を行う対象の struct を定義します。今回はこのstruct を使った List<Customer> に対するアクセスを行います。

public struct Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}

次に、実際にアクセスするデータですが、次の様に定義しておきます。今回は C# 3.0 の新しい記法を使って Collection のデータを作成します。

private static List<Customer> customers = new List<Customer>{ 
        new Customer(){Id=1,Name="Masami", Country="Japan", City="Kanagawa"},
        new Customer(){Id=2,Name="Kazuhiko", Country="Japan", City="Tokyo"},
        new Customer(){Id=3,Name="Tomoyuki",Country="Japan", City="Tokyo"},
        new Customer(){Id=4,Name="Takeshi",Country="Japan",City="Kanagawa"},
        new Customer(){Id=5,Name="Steve",Country="USA",City="Redmond"},
        new Customer(){Id=6,Name="Bill",Country="USA",City="Redmond"}
};

これらのデータに対して LINQ を用いてアクセスします。今回は、次のような Main メソッドを書いてみました。

static void Main(string[] args)
{
    Console.WriteLine("対象のIDを入力してください。");
    string id = Console.ReadLine();

    var cust = from item in customers
                    where item.Id == Int32.Parse(id)
                    select item;

    Customer c = cust.Single<Customer>();

    Console.WriteLine("{0}は{1}に住んでいます。", c.Name,c.City);
    Console.ReadKey();
}

まず、注目していただきたい点が、クエリが From から始まっている点です。これは従来のCollection 操作で使用していた foreach をイメージしていただければよろしいかと思いますが、最初に変数を宣言することで、以降のクエリを記述する際にインテリセンスが効くようになります。もちろん、LINQ の仕組みとしてこの順序で呼び出す必要があるという点もありますが、今回はそこまでの深入りは止めておきます。
そして、where 句を用いてデータの Filtering をしています。ここでは評価式を用いています。
最後に select 句ですが、こちらはSQL 文の select 句と同じで抽出すべき項目(ここではstruct 全体を指定していますが、Field 単位で抽出可能です。)

また、直後の Single<T> のように直接操作することも LINQ の機能でできます。

今回は本当に簡単な LINQ 構文でしたが、こちらの演算子一覧をご参考にしていただくことでもっと複雑な構文を作っていただくことが可能です。

次回は LINQ のなかで、おそらく最も一般的になるであろう LINQ to SQL をご紹介したいと思いますが、色々と告知があるかと思いますのでまた遅れ遅れになるかもしれません。

それでは、次回をお楽しみに。

Posted: Monday, November 12, 2007 4:22 PM by tashinmu

Comments

Anonymous comments are disabled
Page view tracker