2016-03-27 5 views
-1

私はLinqToExcelライブラリを使用してExcelファイルを解析しようとしています。私は簡単にこの中で(をマッピングするために、ライブラリからのマッピングを使用LinqToExcelピボットデータの解析

class MyModel 
{ 
     List<ExtraProperties> extraProperties; 
     String property1; 
     String property2; 
} 

:私のモデルの抽象化は、次のようになります

Property1 | Property2 | HasExtraProperty1 | HasExtraProperty2 | HasExtraProperty3 
------------|---------------|-----------------------|-----------------------|------------------- 
    foo  |  bar  |   yes   |   yes   |   no 
    barfoo |  foobar |   no   |   no   |   yes 
    barbar |  foofoo |   no   |   yes   |   no 

:私のExcelファイルには、以下の「デザイン」を持っています例)列の文字列プロパティ。これはすべて流暢に動作しますが、今では他のプロパティを解析していません。 "yes"の余分なプロパティのみがリストに追加されます。どのようにlinqクエリでこれを解決するための任意のアイデアですか?

注1:将来的には、余分なプロパティの数は変更する必要があります。

注2:私は別のライブラリの使用を検討しましたが、既に私のプロジェクトのどこかでLinqToExcelを使用しています。依存関係を最小限に抑えようとしています。

答えて

0

最も簡単な解決策は、LinqToExcelによって提供される便利なマッピングを放棄し、すべてのcolumnname/rowをループすることでした。

IExcelQueryFactory fact = new ExcelQueryFactory(path); 
var query = from r in fact.Worksheet(0) 
      select r; 
IList<MyModel> models = new List<MyModel>(); 
foreach(var row in query){ 
    MyModel m = new MyModel(); 
    foreach(String colName in MyColMapping.Keys){ 
     p.GetType().GetProperty(colName).SetValue(p, row[ColMapping[colName]]); 
    } 
    foreach(ExtraProperty p in PMapping.Keys){ 
     if(row[PMapping[p]].Equals("yes")) 
      m.ExtraProperties.Add(p); 
    } 
    models.add(m); 
} 

注:ColMappingは、Excelの列名をモデルプロパティでマップする辞書です。 PMappingは、Excelの列を追加のプロパティの適切なオブジェクトにマップする辞書です。