我已经创建了一个void method
,目的是使用sub - DataTable
查询来导出LINQ
,我想知道几次失败后,通过保留{{}来检索子表的最佳方法{1}}类型。我的主要问题来自DataTable
变量implicitly typed
,它检索sublookup
类型的对象。到目前为止,任何将IEnumerable<T>
转换回IEnumerable<T>
的尝试都失败了。
DataTable
作为一种解决方法,我可以使用大量public void subtbl()
{
string LookUpFile;
DataTable LookUpTable = new DataTable();
string[] LookUpDir = RetrieveFileDirectory();
for (int i = 0; i < LookUpDir.Length; i++)
{
LookUpFile =LookUpDir[i];
if (LookUpFile.Contains("Brand"))
{
LookUpTable = ConvertTextFileToDataTable(LookUpFile);
var sublookup = LookUpTable.AsEnumerable()
.Select(x => new { col1 = x["Mac"], col2 = x["Win"],
col3 = x["zo"], col4 = x["dz"], col5 = x["dx"],
col6 = x["zx"] });
}
else
{
Console.WriteLine("\n ... stuck");
Environment.Exit(-1);
}
}
}
,但我承认,如果父DataTable.Columns.Remove("columnname")
包含大量efficient
,则此方法不是很DataTable
}。
编辑:使用 LINQ
坚持解决方案columns
我最终得到错误: var dataRow = LookUpTable.AsEnumerable()
.Select(x => new { col1 = x.Field<string>("Mac"),
col2 = x.Field<string>("Win"),
col3 = x.Field<string>("zo"),
col4 = x.Field<string>("dz"),
col5 = x.Field<string>("dx"),
col6 = x.Field<string>("zx") })
DataTable look = dataRow.CopyToDataTable<DataRow>();
不包含System.Data.EnumerableRowCollection<AnonymousType#1>
....的定义,尽管在{{1}中添加了CopyToDataTable
并且知道System.Data.DataSetExtensions
方法用于将References
转换回CopyToDataTable()
。
最佳,
答案 0 :(得分:0)
我会使用以下方法,不需要LINQ并推荐:
var allSubTables = new List<DataTable>();
string[] relevantColumns = { "Mac", "Win", "zo", "dz", "dx", "zx", };
DataTable lookUpTable = new DataTable();
foreach (string colName in relevantColumns)
lookUpTable.Columns.Add(colName);
foreach (string t in LookUpDir)
{
LookUpFile = t;
if (LookUpFile.Contains("Brand"))
{
DataTable textFileTable = ConvertTextFileToDataTable(LookUpFile);
DataTable subTable = lookUpTable.Clone(); // same columns, empty
foreach (DataRow row in textFileTable.Rows)
{
DataRow addedRow = subTable.Rows.Add(); // already added now
foreach (DataColumn col in subTable.Columns)
addedRow.SetField(col.ColumnName, row.Field<string>(col.ColumnName));
}
allSubTables.Add(subTable);
}
else
{
Console.WriteLine("\n ... stuck");
Environment.Exit(-1);
}
}