Search on the blog

2014年6月14日土曜日

C#入門(4)DataTableでselect

 DataTableの練習。C#では、DataTableにDBから取得したデータを詰めて管理するのが一般的なようだ。JavaでいうEntityのListみたいな感じかと思う。
さらに、DataSetなるものがあって、複数のDataTableをひとつのDataSetで管理できる。
  • DataTable = テーブル
  • DataSet = スキーマ
のようなものと理解している。

 手始めにDataTable#Selectメソッドで
  • データのフィルタリング
  • データのソート
を行うサンプルを書いてみた。なかなか便利ですね。

using System;
using System.Data;

namespace sample
{
    public class DataSetSample
    {
        public static void Main(string[] args) {
            new DataSetSample().Run();
        }

        private DataSet createSampleData() {
            DataSet dataSet = new DataSet();
            
            DataTable dataTable = new DataTable("student");
            
            dataTable.Columns.Add("name");
            dataTable.Columns.Add("age");
            dataTable.Columns.Add("sex");
            
            dataSet.Tables.Add(dataTable);
            
            String[] names = {"taro", "hanako", "jiro", "saburo", "yuka"};
            int[] ages = {10, 10, 9, 8, 7};
            char[] sex = {'M', 'F', 'M', 'M', 'F'};
            
            for (int i = 0; i < names.Length; i++) {
                DataRow dataRow = dataTable.NewRow();
                dataRow["name"] = names[i];
                dataRow["age"]  = ages[i];
                dataRow["sex"] = sex[i];
                dataSet.Tables["student"].Rows.Add(dataRow);
            }

            return dataSet;
        }

        public void Run() {

            DataSet dataSet = createSampleData();

            // select male students
            DataRow[] res = dataSet.Tables["student"].Select("sex = 'M'");
            foreach (var row in res) {
                Console.WriteLine("{0} is a {1}-year-old boy.", row["name"], row["age"]);
            }
            Console.WriteLine();
            
            // select students of the age 10 or above
            res = dataSet.Tables["student"].Select("age >= 10");
            foreach (var row in res) {
                Console.WriteLine("{0} is of the age 10 or above.", row["name"]);
            }
            Console.WriteLine();
            
            // select students whose name ends with "ro"
            res = dataSet.Tables["student"].Select("name like '%ro'");
            foreach (var row in res) {
                Console.WriteLine("{0} is one of 'XXro.'", row["name"]);
            }
            Console.WriteLine();
            
            // sort students by his/her name
            res = dataSet.Tables["student"].Select(null, "name");
            foreach (var row in res) {
                Console.WriteLine("{0}", row["name"]);
            }
            Console.WriteLine();

        }

    }
}

0 件のコメント:

コメントを投稿