This extension method可以在DataSet
中創建所有表格行的笛卡爾積。
public static class Extensions
{
public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(this IEnumerable<IEnumerable<T>> sequences)
{
IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() };
return sequences.Aggregate(
emptyProduct,
(accumulator, sequence) =>
from accseq in accumulator
from item in sequence
select accseq.Concat(new[] { item })
);
}
}
現在你可以以這種方式使用它:
IEnumerable<IEnumerable<DataRow>> allTablesRows = ds.Tables.Cast<DataTable>()
.Select(table => table.AsEnumerable())
.CartesianProduct();
輸出:
foreach (var x in allTablesRows)
{
foreach (DataRow row in x)
{
Console.WriteLine("table:{0} fields:{1}",
row.Table.TableName,
string.Join(",", row.ItemArray));
}
}
所以,你要的所有錶行的笛卡爾積? –
是蒂姆那就是我想要的 – derchrome