返回运行时</string>中linq select子句中List <string>中标识的列

时间:2013-08-27 19:34:40

标签: c# linq

我看过Dynamic linq,但我显然错过了一些东西。

我正在尝试将文件从一个系统导入另一个系统。我有一个从包含文件信息的Excel工作表加载的DataTable。 (ExcelDataTable)。我还有一个用户想要导入的HastSet文件。 (FilesToImport)。用户从speadsheet中选择要导入的信息,这些列是动态的并在运行时选择。 (列出VariablesToUpdate)。我在查询中加入了我的ID,但我不确定如何从数据表返回所需的列。

DataTable dt = new DataTable();
var query =
    from excelRow in this.ExcelDataTable.AsEnumerable()
    join file in this.FilesToImport.AsEnumerable()
    on excelRow.Field<Guid>("ceGuid") equals file.SourceFileIdentifier
    select dt.LoadDataRow(new object[]
    <COMPLETELY LOST HERE>
    , false);
query.CopyToDataTable();

如果我知道我希望使用类似的内容返回,我可以解决这个问题。

select new { ImportSourceFilePath = excelRow.Field<string>(filePathColumn)};

但就像我说我的专栏会有所不同,直到运行时他才会知道它们是什么。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用ExpandoObject进行实施。

HereExpandoObject

的一个小教程

答案 1 :(得分:0)

我最终做了什么;

var foundExcelRows =
from excelRow in this.ExcelDataTable.AsEnumerable()
join file in this.FilesToImport.AsEnumerable()
on excelRow.Field<Guid>("ceGuid") equals file.SourceFileIdentifier
select excelRow;

for (int i = 0; i < foundExcelRows.Count(); i++)
{
    DataRow row = foundExcelRows.ElementAt(i);
    // work with this row since I know the columns I expect   
}