我一直在尝试使用LinqToExcel库解析excel文件。我的excel文件有以下" design":
Property1 | Property2 | HasExtraProperty1 | HasExtraProperty2 | HasExtraProperty3
------------|---------------|-----------------------|-----------------------|-------------------
foo | bar | yes | yes | no
barfoo | foobar | no | no | yes
barbar | foofoo | no | yes | no
我的模型的抽象看起来像这样:
class MyModel
{
List<ExtraProperties> extraProperties;
String property1;
String property2;
}
我使用库中的映射来轻松地将(在此示例中)String属性映射到列。这一切都很流利,但现在我解析了其他属性。只有带有&#34;是&#34;的额外属性应该添加到列表中。有关如何使用linq查询解决此问题的任何想法?
注1:为了面向未来,额外属性的数量应该可以变化。
注意2:我考虑使用其他库,但我已经在项目的某个地方使用了LinqToExcel,并且我试图将依赖项保持在最低限度。
答案 0 :(得分:0)
似乎最简单的解决方案是放弃LinqToExcel提供的方便映射,并循环遍历每个列名/行。
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是一个字典,它使用model-properties映射excel-columns的名称。 PMapping是一个字典,它将excel-columns与额外属性的正确对象进行映射。