使用LINQ创建Sub-DataTable,并返回DataTable

时间:2016-06-16 12:24:46

标签: c# linq datatable ienumerable

我已经创建了一个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()

最佳,

1 个答案:

答案 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);
    }
}