TOPシステム開発> 第3回:さまざまなデータソースへのアクセス (2/3)

次世代データアクセステクノロジー」

次世代データアクセステクノロジー

第3回:さまざまなデータソースへのアクセス

著者:マイクロソフト  小高 太郎

公開日:2008/1/22(火)

遅延実行の注意点

こうしたメカニズムからリスト4のようなプログラムを扱う場合は注意が必要になってくる。

リスト4の例では、(1)のforeachループ1回目のタイミングでSQL Serverに対して問い合わせ(publishersテーブル)が発生する。問題は(2)のタイミングである。(2)では(1)のループごとに(publishersに関連づいた)titlesに対してのSQLがSQL Serverに対して毎回発行されてしまうことになる。

この回避方法としては、リスト5のようにサブクエリーを使用した形にすれば、SQL Serverへの問い合わせは1回で済む。



リスト5:複数のSQL発行を回避する方法
static void Main(string[] args)
{
    using(pubsDataContext pubs = new pubsDataContext())
    {
        var query = from p in pubs.publishers
                  select new
                    {
                        p.pub_name,
                       TitleName = from t in pubs.titles
                                    where p.pub_id == t.pub_id
                                    select new
                                    {
                                        t.title1
                                        }
                     };

        foreach(var q1 in query)
        {
            Console.WriteLine("Publesher: {0}", q1.pub_name);
            foreach(var q2 in q1.TitleName)
            {
               Console.WriteLine("\tTitleName: {0}", q2.title1);
           }
        }
    }
}

リスト6:Windowsアプリケーションでのコントロールバインドの例
private void Form1_Load(object sender, EventArgs e)
{

    var emp = from x in pubs.employees
             where x.job_lvl >= 200
             select x;
        dataGridView1.DataSource = emp;
}


データバインド

LINQを使用して、コントロールのバインドを行うことができる。特にWebアプリケーション内では、データソースとしてLINQ Data Sourceという新しいデータソースが追加されている。これを用いることで、WebアプリケーションでシームレスにLINQを使用することができるようになっている(リスト6)。 次のページ


前のページ  1  2  3  次のページ


マイクロソフト株式会社 小高 太郎
著者プロフィール
マイクロソフト株式会社  小高 太郎
ERP パッケージ開発に携わり、プログラマーからスタート。Microsoft Universityの講師を兼務、その後、SE、PM、管理職の道に進むも、縁あって2007年3月よりデベロッパー エバンジェリストに転身、現在は開発者向けに様々な技術訴求を行うべく活動中。


INDEX
第3回:さまざまなデータソースへのアクセス
  LINQ to SQLにおける「追加」「更新」「削除」の操作とLINQ to Object
遅延実行の注意点
  LINQ to Object