表:
<table border="1">
<tr>
<td><b>Name</b></td>
<td><b>Selection</b></td>
</tr>
<tr>
<td>Color</td>
<td>1,2,3</td>
</tr>
<tr>
<td>Shape</td>
<td>a,b</td>
</tr>
<tr>
<td>Cut</td>
<td>x</td>
</tr>
<tr>
<td>Range</td>
<td>y</td>
</tr>
<tr>
<td>Purity</td>
<td>8,9</td>
</tr>
</table>
&#13;
我有一个关键词:颜色|形状|切|范围|纯度
我想循环选择列,需要结果如下
1axy8
1axy9
1bxy8
1bxy9
2axy8
2axy9
2bxy8
2bxy9
3axy8
3axy9
3bxy8
3bxy9
如何在选择列上循环?
答案 0 :(得分:0)
您需要递归地解析数据以获得您要查找的结果 试试这段代码
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 dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Selection", typeof(string));
dt.Rows.Add(new object[] { "Color", "1,2,3" });
dt.Rows.Add(new object[] { "Shape", "a,b" });
dt.Rows.Add(new object[] { "Cut", "x" });
dt.Rows.Add(new object[] { "Range", "y" });
dt.Rows.Add(new object[] { "Purity", "8,9" });
Recursion recursion = new Recursion(dt);
List<string> results = recursion.GetData(0);
}
}
public class Recursion
{
public DataTable data { get; set; }
public Recursion(DataTable data)
{
this.data = data;
}
public List<string> GetData(int level)
{
if (level == data.Rows.Count - 1)
{
return data.Rows[level].Field<string>("Selection").Split(new char[] {','}).Select(x => x.ToString()).ToList();
}
else
{
List<string> children = GetData(level + 1);
List<string> results = data.Rows[level].Field<string>("Selection").Split(new char[] { ',' }).Select(x => children.Select(y => x + "|" + y)).SelectMany(z => z).ToList();
return results;
}
}
}
}