0

我正在将两个 excel 工作表(使用Linq-To-Excel)的输入读入两个列表。其中一个工作表包含不需要的数据列(列名已知)。然而,两个工作表中的其他列包含完全相同类型的数据。

我的问题的第一部分是:
我怎样才能在 select 语句中只排除那些不受欢迎的数据列(而不必为其他 25 个左右的列编写 select.column 名称?我打算这样做是为了以下目的:

  1. 制作相同类型的两个列表
  2. 合并两个列表
  3. 可能将此代码块移动到调用过程,因为最终我将不得不从更多工作表中读取

    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:
关于输入文件:

  1. StaticResults 文件有 28 列(STC 类有 28 个属性)
  2. DynamicResults 文件有 29 列(28 列具有与静态相同的属性/列名称加上一个额外的属性,这不是必需的)(DYN 是 STC 的派生类)
4

2 回答 2

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();
于 2013-05-07T20:38:43.193 回答
0

无意中找到了我第一个问题的解决方案。可能没什么了不起的,但尽管如此,我还是想在这里分享它。

  1. 摆脱了二等DYN
  2. 使第二个列表的类型为 STC

这样,生成的两个列表都只提取那些需要的属性/列(在类中声明的属性)。跳过不需要的额外列(因为我没有将它们定义为类中的属性。我认为这是由 linq-to-excel 提供的。如果有人可以更深入地了解它)。

于 2013-05-08T10:46:53.983 回答