読者です 読者をやめる 読者になる 読者になる

新人SEの学習記録

14年度入社SEの学習記録用に始めたブログです。気づけば社会人3年目に突入。

学習記録:.NET、AOJ、参加記録:Atcoder Regular Contest、

[学習記録] .NET

内容:第3章 データアクセス技術(続き)

LINQによるデータアクセス
  • LINQの特徴
    • 言語上で、言語仕様としてクエリを記述:コンパイル時のエラーチェックやIntelliSenseが有効
    • 様々なデータソースのアクセスに大して、統一的なプログラミングモデルを提供
    • 異なるデータソースに対し同じクエリを記述
    • SQL構文に類似した記述
LINQクエリ概要
  • LINQクエリ操作の3手順
  1. データソースを取得する
  2. クエリを作成する
  3. クエリを実行する
  • 整数配列を用いたサンプルを用いて説明
// データソースの取得
int[] nums = new int[7] {0, 1, 2, 3, 4, 5, 6};

// クエリを作成
var numQuery = from num in nums
                          where (num % 2) == 0
                          select num;

// クエリを実行
foreach(int num in numQuery)
{
    Console.Write("{0}", num);
}
  • データソース
    • LINQにおけるデータソースは、基本的にIEnumerableインタフェースを実装している必要
    • サンプルでは整数配列がデータソース、暗黙的にIEnumerableがサポートされる
  • クエリ
    • データソースからどのような情報を取得するかを指定
    • オプションとして、情報が返される前に並べ替えやグループ化し、構造化する方法を指定できる
    • サンプルでは、整数の配列から全ての偶数が返される
    • 句の順番が普通のSQLとは逆
    • この時点ではクエリの実行は行われない
  • クエリの実行
    • 実際のクエリの実行は、foreachでクエリ変数(numQuery)が反復処理されるまで延期(遅延実行)
    • サンプルでは返されるシーケンスの各値がnumに一度に一つずつ格納される
    • 遅延実行では、クエリ変数(numQuery)にクエリ結果は格納されず、必要に応じて何度でもクエリを実行できる
    • 例えば、最新のデータを取得するクエリを1つ作れば、それを一定間隔で実行するだけで毎回最新の結果を取得できる
    • また、集計関数を用いてデータソースの集計値などを容易に取得可能
var evenNumQuery =
from num in nums
where (num % 2) == 0
select num;

int evenNumCount = evenNumQuery.Count();

※コレクション変換メソッドを用いてオブジェクトに全てのデータをキャッシュすることも可能

List<int> numQuery =
(from num in nums
where (num % 2) == 0
select num).ToList();
  • LINQ to DataSet
    • LINQの処理を用いて、非接続型で紹介したDataSetに適応することも可能
    • DataSetに対してLINQを通じてデータの二次加工を可能にする技術
    • DataSetに対するクエリの発行に対して開発生産性を大幅に向上
jobsTableAdapter.Fill(jobsDataSet.jobs)

var jobs = 
from t in ds.jobs
where t.max_lvl > 200
select new
{
    t.job_id,
    t.job_desc,
    t.max_lvl
};

foreach (var t in jobs)
{
    Console.WriteLine(t);
}

[参加記録] AtCoder Regular Contest 029

結果

  • A問題100点のみorz
    • そろそろグラフっぽい問題も解けるようになりたい
    • とりあえず今ある本を消化したらちゃんと勉強しよう

[学習記録] AOJ

プログラミングコンテスト系を探していたらこんなんあるんですね。
AIZU ONLINE JUDGE: Programming Challenge

とりあえずIntroductionにあるプログラム(150問くらい?)を全て解くのを目標にやっていきます。
しかし問題を解いても解答数やレーティングが更新されないのは何でだろう?

解答数

  • 合計28問
    • Introduction to Programming:28問