【c#】DataTableの値を並び替えて取得する方法

C#

下記のようなデータがdatatableに格納されていたとして、”Value”列、”Name”列の値を並び替えたうえでDataRowに値を格納する方法を紹介します。

まずValue列で降順で並び替え、Value列の値が同じ場合はName列で昇順で並び替えを行います。

並び替え前のDataTableの値(イメージ)

ソースコード

下記がソースコードとなります。DataTableのSelectメソッドを使って並び替えを行っています。並び替えた結果はDataRowに格納します。

コンソールアプリケーションに下記ソースを張り付けて挙動を確認してみてください。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //テーブルの作成し、グラフへプロットするデータを保管する。
            System.Data.DataTable Table = new System.Data.DataTable();
            Table.Columns.Add("ID", typeof(int));
            Table.Columns.Add("Name", typeof(string));
            Table.Columns.Add("Value", typeof(double));
            Table.Rows.Add(new Object[] { 1, "AAA", 120 });
            Table.Rows.Add(new Object[] { 2, "BBB", 220 });
            Table.Rows.Add(new Object[] { 3, "CCCCC", 60 });
            Table.Rows.Add(new Object[] { 4, "DD", 430 });
            Table.Rows.Add(new Object[] { 5, "E", 800 });
            Table.Rows.Add(new Object[] { 6, "FFFFFFF", 360 });
            Table.Rows.Add(new Object[] { 7, "GGGG", 990 });
            Table.Rows.Add(new Object[] { 8, "HHHHHHHHHHH", 150 });
            Table.Rows.Add(new Object[] { 9, "IIII", 360 });
            Table.Rows.Add(new Object[] { 10, "JJJJJJJ", 960 });
            Table.Rows.Add(new Object[] { 11, "K", 740 });
            Table.Rows.Add(new Object[] { 12, "L", 960 });
            Table.Rows.Add(new Object[] { 13, "MMM", 780 });
            Table.Rows.Add(new Object[] { 14, "N", 800 });
            Table.Rows.Add(new Object[] { 15, "OOOOOOOO", 690 });

            //並び変え前の値を表示する
            Console.WriteLine("並び替え前");
            for (int i1 = 0; i1 < Table.Rows.Count - 1; i1++)
            {
                Console.WriteLine(string.Format("ID:{0:-10},Name:{1:-10},Value:{2:-10}", Table.Rows[i1][0].ToString(), Table.Rows[i1][1].ToString(), Table.Rows[i1][2].ToString()));
            }
            Console.WriteLine("");

            //テーブルのレコードの並び替えを行う。
            // ①Value列で降順に並び替える。
            // ②Name列で昇順に並び替える。
            DataRow[] Rows = Table.Select("", "Value DESC, Name ASC");

            //並び変え後の値を表示する
            Console.WriteLine("並び替え後");
            for (int i1 = 0; i1 < Table.Rows.Count - 1; i1++)
            {
                Console.WriteLine(string.Format("ID:{0:-10},Name:{1:-10},Value:{2:-10}", Rows[i1][0].ToString(), Rows[i1][1].ToString(),Rows[i1][2].ToString()));
            }
            Console.Read();
        }
    }
}
上記コードを実行した結果

参考になれば幸いです。

タイトルとURLをコピーしました