C#:合并数据表中的Datarows

时间:2018-02-19 06:10:21

标签: c# datatable

我有一个包含以下详细信息的数据表。

ID     |   VERSION  |   ENTITY
1      |    01      |   A01
1      |    01      |   A02
2      |    01      |   A01
2      |    01      |   A02

我想合并列ENTITY的值,如下所示。

ID     |   VERSION  |   ENTITY
1      |    01      |   A01/A02
2      |    01      |   A01/A02

我们有什么方法可以使用Linq实现它吗?

2 个答案:

答案 0 :(得分:2)

您可以使用匿名类型按多个属性进行分组:

var result = list1.GroupBy(x=> new {x.ID, x.VERSION}).Select(
    item => new Example
    {
        ID = item.Key.ID, 
        VERSION = item.Key.VERSION,
        ENTITY = string.Join("/", item.Select(c=>c.ENTITY))
    });

然后选择适当的属性并将它们提供给所需类型的新对象。

输出:

enter image description here

修改

DataTable中,您需要通过[ ]运算符访问列,但分组原则保持不变:

Examplary DataTable:

DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("VERSION", typeof(string));
table.Columns.Add("ENTITY", typeof(string));

table.Rows.Add(1, "01", "A01");
table.Rows.Add(1, "01", "A02");
table.Rows.Add(2, "01", "A01");
table.Rows.Add(2, "01", "A02");

分组:

var result = table.AsEnumerable().GroupBy(x => new { ID = x["ID"], VERSION = x["VERSION"]}).Select(
    item => new Example
    {
        ID = (int)item.Key.ID,
        VERSION = (string)item.Key.VERSION,
        ENTITY = string.Join("/", item.Select(c => c["ENTITY"]))
    });

答案 1 :(得分:0)

此查询似乎有效:

var output = from d in DataTable
             group d.ENTITY by new { ID, VERSION } into grp
             select grp;

如果您使用的是类似实体框架的内容,则可能会使用output.ToList()来获取值。如果您想在代码中访问IDVERSION,则可以使用包含两个而不是new { ID, VERSION }的类