0

假设我有一个 TmpClass 类,我使用这个类使用 LinqToExcel ExcelQueryFactory 从 Excel 工作表返回数据。在这个类中,我需要实现一些逻辑来检查数据的正确性。当我使用 ExcelQueryFactory 从 Excel 工作表中检索数据时,它返回 ExcelQueryable(它源自 IQueryalbe) 多个 TmpClass 实例可能存在验证问题 - 如何以集合样式处理它们?

Excel 工作表数据映射类

public class TmpClass
{
    private string _name;
    public string Name
    {
        set {
            if (string.IsNullOrWhiteSpace(value))
            {
                throw new ArgumentException("Value can not be null/whitespace!");
            }
            _name = value;
        }
    }
}

使用 LinqToExcel ExcelQueryFactory 从 Excel 工作表中检索数据

..initialize ExcelQueryFactory instance, get column names, set column mapping
//retrieve data    
var dataFromExcel = excel.Worksheet<TmpClass>(...worksheet name).ToList();

在读取 Excel 工作表行时,其中一些 TmpClass.Name setter 函数将抛出 ArgumentException - 我需要一种方法来处理所有 Excel 工作表行:

  1. 对具有 ArgumentException 的行(日志记录)执行一些操作
  2. 并对具有有效数据的行执行一些其他操作。

我可以获得无效项目的集合(可能包含异常信息)吗?我可以获得有效物品的集合吗?

4

1 回答 1

1

即使您将手动迭代项目,也可能很难做到。

var enumerator = excel.Worksheet<TmpClass>(...).GetEnumerator();
while (true)
{
    try
    {
        if (!enumerator.MoveNext())
            break;
        // use enumerator.Current some way
    }
    catch
    {
        // you can't use enumerator.Current
    }
}

由于调用时发生异常MoveNext,因此无法知道枚举中是否有更多项。并且不能保证实际上MoveNext已经在元素上移动了一个指针。

因此,显然,最简单的方法是创建另一个类,如TmpClass没有任何业务逻辑的,只是为了存储值,并使用这个新类。

于 2015-03-03T08:04:43.193 回答