2015-09-28 30 views
0

我填充了DataTable。 在每一行中,我嘗試找到一些必須唯一的字符串值。如果我找到具有該值的行,我需要下去(跳過一些行),直到找到具有某個常量字符串(如Expr1)的行。現在我需要返回包含Expr1的所有行。比較DataTable的兩行索引

所以有兩個條件:

1 - 找到輸入值排Row1。 2 - 找到最接近Row1的行,其中包含常量值Expr1並將其返回。

InputValueToFind| 
Week1   | 1 
Week2   | 2 
Week3   | 3 
Total   | 6 

Expr1   | 4 

這是怎麼我的Excel文件看起來(從Excel文件的所有數據寫到數據表)


DataRow[] netPay = dt.AsEnumerable().Where(row => row[0].ToString().Trim().ToLower().Equals("Expr1".ToLower())).ToArray(); 

此代碼返回從包含Expr1數據表中的所有行。

for (var i = 0; i < dt.Rows.Count; i++) 
         { 
          if (dt.Rows[i][0].ToString().Trim().ToLower().Equals(inputVal.ToLower())) 
          { 
           // do some stuff 
          } 
         } 

使用此代碼,我可以得到行InputValue

問題 - 現在我不知道如何找到最接近的行Expr1InputValue(換句話說,我不知道如何使用這兩個代碼塊)。

回答

0

如果你這樣做在IEnumerable上選擇,有一個可選的通用int TIn參數,你可以按以下方式使用。

Select<DataRow, int, KeyValuePair<int, DataRow>>((row,idx) => new KeyValePair<int, DataRow>(idx, row) 

使用該類型,可以更輕鬆地執行索引(近似)檢查。


我會創造我自己的對象(S)類型這雖然

public class IndexDataRowPair 
{ 
    public int Index {get;set;} 
    public DataRow Row {get;set;} 

    // or, just the values you intend to use 
    // public string InputValue {get;set;} 
    // public string ExpressionValue {get;set;} 
} 

... 

// generic Select<TIn, Tin, TResult> parameters will be inferred:= 
// Select<DataRow, int, IndexDataRowPair> 
dt.Select((row,idx) => new IndexDataRowPair() { Index = idx, Row = row }); 
+0

但要獲得真正的索引行後選擇我應該做的過濾。我對麼? – demo

+0

@demo,這是正確的,是的..對於執行後選擇過濾器將爲您提供剩餘集合的索引,並且這將不會有助於您的scenerio ... –