2015-03-03 9 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