LINQ練習 #1 「LINQ to Object 基本」

2009-02-25 12:50:51

どうも、悠希です。
Visual Studio 2008から追加された機能、LINQを使っていく為に色々とメモがてら書いていきます。
最初は「LINQ to Object」を扱おうかと思います。

今回は当日から1年の間の日曜日をすべて取得するLINQを書いていきます。
これを普通のプログラムで書くと下記の通りとなります。

C#
for (int i = 0; i <= 365; i++)
{
    if (DateTime.Today.AddDays(i).DayOfWeek == DayOfWeek.Sunday)
    {
        Console.WriteLine(DateTime.Today.AddDays(i).ToShortDateString());
    }
}
Visual Basic
For i As Integer = 0 To 365
    If Today.AddDays(i).DayOfWeek = DayOfWeek.Sunday Then
        Console.WriteLine(Today.AddDays(i).ToShortDateString)
    End If
Next

これをLINQに変更すると下記のとおりとなります。
コーディング数が増えてしまいますが、サンプルという事でご勘弁を・・・

C#
List list;
list = new List();
for(int i=0;i<=365;i++) list.Add(DateTime.Today.AddDays(i));

var sunday = from M in list where M.DayOfWeek == DayOfWeek.Sunday select M;

foreach (var row in sunday) {
    Console.WriteLine(row.ToShortDateString());
}
Visual Basic
Dim list As New List(Of Date)
For i As Integer = 0 To 365
    list.Add(Today.AddDays(i))
Next

Dim sunday = From M In list Where M.DayOfWeek = DayOfWeek.Sunday Select M

For Each row As Date In sunday
    Console.WriteLine(row.ToShortDateString)
Next

次に当日から1年間の間の日曜日、かつ当年のデータを取得するように変更してみます。

C# (2009/02/25 14:30 修正)
List list;
list = new List();
for(int i=0;i<=365;i++) list.Add(DateTime.Today.AddDays(i));

int nowYear;
nowYear = DateTime.Today.Year;
var sunday = from M in list where M.DayOfWeek == DayOfWeek.Sunday && M.Year = nowYear select M;

foreach (var row in sunday) {
    Console.WriteLine(row.ToShortDateString());
}
Visual Basic
Dim list As New List(Of Date)
For i As Integer = 0 To 365
    list.Add(Today.AddDays(i))
Next

Dim nowYear As Integer = Today.Year
Dim sunday = From M In list Where M.DayOfWeek = DayOfWeek.Sunday And M.Year = nowYear Select M

For Each row As Date In sunday
    Console.WriteLine(row.ToShortDateString)
Next

元のコーディングの場合も考えてみると、IF文を追加する、もしくはIF文の条件を増やす方向になりますが、LINQの場合にはSQLで条件を追加するような形で仕様追加ができている事がわかります。
このようにLINQを使う事によって配列やコレクションから値を検索するのにSQL文を記述するかのように指定する事ができます。

しかも、LINQはオブジェクトに対しての処理だけではなく、XMLやSQL Serverに対する処理も同様に行う事が可能です。

次回はSQL Serverに対してSQL文を発行する例を書いていこうかと思っています。

※このエントリは ブロガーにより投稿されたものです。朝日インタラクティブ および ZDNet Japan編集部の見解・意向を示すものではありません。
  • 1件のコメント
#1   2009-02-25 15:33:10
LINQらしくということなら。<code>var daylist = from d in
(from i in Enumerable.Range(0, 365)
select DateTime.Today.AddDays(i))
where d.DayOfWeek == DayOfWeek.Sunday
select d;
foreach (var day in daylist)
{
Console.WriteLine(day.ToString("yyyy-MM-dd"));
}</code>
  • 新着記事
  • 特集
  • ブログ