2015-03-03 30 views
0

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

类为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; 
     } 
    } 
} 

检索从Excel表单数据与LinqToExcel ExcelQueryFactory

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

当读取Excel工作表的行,对其中一些TmpClass.Name设定器的函数会抛出ArgumentException - 我需要一种方法来处理所有的Excel工作表行:

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

我可以得到一个无效项目的集合(也许有异常信息)吗?我可以收到有效物品的集合吗?

回答

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,只是为了存储值以及使用这个新类。

+0

感谢您领导正确的方向 - 我会将验证移出设置方法 – Prokurors 2015-03-06 16:29:00