动态创建按列和函数调用分组的新DataTable集

时间:2014-11-10 16:55:19

标签: c# dynamic datatable

我有一个如下所示的DataTable:

| ItemName |ItemValue A 3,1 B 2,2 C 1,5 A 2,0 B 1,4 A 2,7 C 1,3 C 2,1 B 1,9

我已经使用此代码进行了排序:

_inputTable = _inputTable.AsEnumerable() .GroupBy(r => r.Field<string>("ItemName")) .SelectMany(g => g.OrderBy(r => r.Field<string>("ItemName"))) .CopyToDataTable();

所以最后看起来应该是这样的:

| ItemName |ItemValue A 3,1 A 2,0 A 2,7 B 2,2 B 1,4 B 1,9 C 1,5 C 1,3 C 2,1

现在我想创建它,以便它对唯一ItemName的集合进行分组,并动态调用仅具有其setsname的函数。

例如最后会有3组dataTable; As,Bs和Cs的集合,它会调用此函数&#39; runMain&#39;参数3次:runMain(&#34; A&#34;),runMain(&#34; B&#34;)和runMain(&#34; C&#34;)

有人可以帮我弄明白怎么做吗?

2 个答案:

答案 0 :(得分:1)

您可以创建一个新对象来使用:

public class Data
{
    public string Key { get; set; }
    public List<string> Values { get; set; }
}

然后你可以做类似的事情:

var datas = _inputTable.AsEnumerable()
        .GroupBy(r => r.Field<string>("ItemName"))
        .Select(r => 
            new Data
            {
                Key = r.Key, 
                Values = r.Select(x => x.Field<string>("ItemValue")).ToList()
            });

 foreach (var data in datas)
 {
    SomeMethod(data);    
 }

因为你想保持每个字母的数据表完好无损,你可以试试这个:

 var tables = _inputTable
           .AsEnumerable()
           .Select(x => x.Field<string>("ItemName"))
           .Distinct()
           .Select(c => dt.Select("ItemName = '" + c + "'").CopyToDataTable())
           .ToList();

答案 1 :(得分:0)

如果你需要的只是唯一的名字,这应该适合你。

var distinctNames = _inputTable.AsEnumerable()
    .Select(r => r.Field<string>("ItemName"))
    .Distinct();

foreach (var name in distinctNames)
{
    runMain(name );    
}