通过使用基于值的现有新数据表来形成新的数据表

时间:2017-01-09 06:56:33

标签: c# datatable

我有一个由sql查询填充的数据表,它有ID,subject,Description

enter image description here

根据主题和描述值,我需要形成如下的数据表,

enter image description here

对于Ids 123,234值具有相同的主题和描述,因此我需要合并为单行,并且需要在单个ID列中设置两个Id值。

我怎样才能做到这一点?可能吗 ?任何想法都会非常感激。

1 个答案:

答案 0 :(得分:1)

请尝试以下操作:

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt1 = new DataTable();
            dt1.Columns.Add("ID", typeof(int));
            dt1.Columns.Add("Subject", typeof(string));
            dt1.Columns.Add("Description", typeof(string));

            dt1.Rows.Add(new object[] { 123, "Test", "Test" });
            dt1.Rows.Add(new object[] { 234, "Test", "Test" });
            dt1.Rows.Add(new object[] { 456, "Test 1", "Test1" });
            dt1.Rows.Add(new object[] { 789, "Test 1", "Test1" });

            DataTable dt2 = new DataTable();
            dt2.Columns.Add("ID", typeof(string));
            dt2.Columns.Add("Subject", typeof(string));
            dt2.Columns.Add("Description", typeof(string));

            dt2 = dt1.AsEnumerable()
                .GroupBy(x => x.Field<string>("Subject"))
                .Select(x => dt2.Rows.Add(new object[] {
                        string.Join(",", x.Select(y => y.Field<int>("ID").ToString()).ToArray()),
                        x.Key,
                        x.FirstOrDefault().Field<string>("Description")
                    })).CopyToDataTable();

        }
    }
}