2013年2月20日 星期三

DataTable的Distinct以及插資料

參考網址參考網址
是說DataTable要以某一欄(Column)為主,取不重複值,這個其實不難做
以前以為要用LinQ啥的一直很排斥去學,總想著能用SQL就不要用另一套

最近大概腦袋被門夾到開竅了想說多多嘗試
程式碼就一行不囉嗦!
DataTable NewDT = OldDT.DefaultView.ToTable(true, new string[] { "要取專一值的Column名稱" });


因為字數太少灌水一下加碼分享

那如果要達到以下效果的話~資料倒入方式如下,先倒不重複值才知道欄位要開多大阿~

原始資料 展示方式
Name Type
Aries 1
Aries 2
Aries 3
Canaer 1
Canaer 2
Canaer 3
Name Type
Aries 1,2,3
Canaer 1,2,3
1.倒入有重複值那一行(Name)
DataTable NewDT = OldDT.DefaultView.ToTable(true, new string[] { "Name" });

2.加入新的一行欄名(有多欄的話,可以在這邊都加一加)
NewDT .Columns.Add("Type");
NewDT .Columns.Add("Type2");....etc.

3.比對新舊DataTable,將值插入新的Type欄

 string strType = "";

        for (int i = 0; i < NewDT.Rows.Count; i++)
        {

            Label olType = new Label();
            for (int j = 0; j < OldDT.Rows.Count; j++)
            {
                if (OldDT.Rows[j]["Name"].ToString() == NewDT.Rows[i]["Name"].ToString())
                {
                    strType += OldDT.Rows[j]["Type"].ToString();

                    if (j < OldDT.Rows.Count - 1)
                    {
                        strType += ",";
                    }

                    olType.Text = strType;
                }
                if (olType.Text.Length > 0)
                {
                    if (olType.Text.Substring(olType.Text.Length - 1, 1) == ",")
                    {
                        olType.Text = olType.Text.Substring(0, olType.Text.Length - 1);
                    }
                }
               
            }
            //不用NewDT.Rows[i]["Type"].ToString()
            NewDT.Rows[i]["Type"] = olType.Text;
         
        }



好了就這樣

沒有留言:

張貼留言