我正在将两个excel工作表(使用Linq-To-Excel
)的输入读入两个列表。其中一个工作表有一个不需要的数据列(列名已知)。但是,两个工作表中的其他列包含完全相同类型的数据。
我的问题的第一部分是:
如何在select语句中只排除那些未经过破坏的数据列(不必为其他25个左右的列写select.column名称?我打算为以下目的执行此操作:
可能会将此代码块移动到调用过程,因为最终我将不得不从更多工作表中读取
ExcelQueryFactory excel = new ExcelQueryFactory(FilePath);
List<STC> stResults = (from s
in excel.Worksheet<STC>("StaticResults")
select s)
.ToList();
List<DYN> dynResults = (from s
in excel.Worksheet<DYN>("DynamicResults")
select s) //how can I EXCLUDE just one of the columns here??
.ToList();
我是c#和linq的新手。所以请原谅我的无知: - )
我的问题的第二部分是:
我正在提取的上述数据有点胖(从100,000到300,000行不等)。我必须使用for循环在上面的列表上(在1000到4000倍的范围内)继续给出重复的linq查询。是否有更好的方法来实现这一点,因为它会对性能产生巨大影响。
EDIT_1:
关于输入文件:
答案 0 :(得分:0)
从linq中选择结果时使用匿名类型。
ExcelQueryFactory excel = new ExcelQueryFactory(FilePath);
List<STC> stResults = (from s
in excel.Worksheet<STC>("StaticResults")
select s)
.ToList();
List<DYN> dynResults = (from s
in excel.Worksheet<DYN>("DynamicResults")
select new {Property1 = s.xxx, Property2 = S.yyy) //get the props based on the type of S
.ToList();
答案 1 :(得分:0)
无意中找到了我的第一个问题的解决方案。可能没什么好看的,但不过想到会在这里分享它。
这样,生成的两个列表都只提取了所需的属性/列(在类中声明的属性)。不需要额外的列被跳过(因为我没有将它们定义为类中的属性。我认为,这是linq-to-excel的礼貌。我想知道更多关于它的信息,如果有人可以更深入地了解它。)