2013-05-07 15 views
0

我正在從兩個Excel工作表(使用Linq-To-Excel)讀取輸入到兩個列表中。其中一個工作表有一個不需要的數據列(列名是已知的)。但是,兩個工作表中的其他列都包含完全相同的數據類型。

我的問題的第一部分是:
我如何排除只在select語句的數據(那unwamted列,而無須編寫select.column名稱爲其他25個左右的列,我打算這樣做對於以下目的:如何跳過列表中的一列(也許更多)列數據linq

  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。所以,請原諒我的無知:-)

我的問題的第二部分是:
我正在提取上述數據是在偏胖(100000-300000行不同)位。我必須繼續使用for循環在上面的列表中重複執行linq查詢(範圍在1000到4000次之間)。是否有更好的方法來實現這一點,因爲它會對性能造成巨大影響。


EDIT_1:
關於輸入文件:

  1. StaticResults文件具有28列(STC類具有28個屬性)
  2. DynamicResults文件具有29列(具有相同屬性的28列/列名稱爲靜態加上一個附加屬性,這是不需要的)(DYN是來自STC的派生類)

回答

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(); 
+0

有25個以上的屬性,我希望避免在select語句中編寫所有25個屬性。不是我很懶(我是!)但我只是想弄清楚是否有更好的方法。非常及時的答覆感謝:-) – InoWotImDoin 2013-05-07 20:51:33

0

不留神想出解決我的第一個問題。可能沒有什麼大不了的,但想到會在這裏分享它。

  1. 擺脫了第二類DYN
  2. 做出的第二個列表中的類型爲STC

這樣既名單產生的提取所需要的(在聲明的屬性只有那些屬性/列該類)。不需要額外的列被跳過(因爲我沒有將它們定義爲類中的屬性,我認爲,這是linq-to-excel的禮貌,我想知道更多關於這個的信息,如果有人可以更深入地瞭解它)。

相關問題