我有一个如下所示的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;)
有人可以帮我弄明白怎么做吗?
答案 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 );
}