2016-03-27 25 views
-1

LinqToExcel kütüphanesini kullanarak bir Excel dosyasını ayrıştırma çalışıyorum. Benim excel dosyası aşağıdaki "tasarım" vardır:LinqToExcel döndürülen verileri ayrıştırma

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

benim modelinin bir soyutlama şöyle görünür: bu (

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

kolayca eşlemek için kütüphaneden eşleştirmeleri kullanılır örnek) Sütunlara dize özellikleri. Tüm bunlar akıcı bir şekilde çalışıyor, ama şimdi diğer özellikleri ayrıştırayım. Listeye sadece "evet" içeren ekstra özellikler eklenmelidir. Bunu bir linq sorgusuyla çözmek için herhangi bir fikir?

Not 1: Gelecek için, fazladan özelliklerin sayısı değişebilir olmalıdır.

Not 2: Başka bir kitaplık kullanmayı düşündüm, ancak projemde LinqToExcel'i zaten kullanıyorum ve bağımlılıkları asgari düzeyde tutmaya çalışıyorum.

cevap

0

En kolay çözüm, LinqToExcel tarafından sağlanan uygun eşleştirmeyi bırakmak ve sadece her sütun adı/satırda döngü yapmaktı.

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); 
} 

Not: ColMapping, model özellikleriyle birlikte excel sütunlarının isimlerini eşleyen bir sözlüktür. PMapping, excel-sütunları ekstra özelliklerin doğru nesnesiyle eşleyen bir sözlüktür.

İlgili konular