2015-08-19 26 views
0

有什麼方法可以將此循環轉換爲Lambda表達式? 我想通過檢查列表值是否爲空或「調用」來檢查列中的某些行,並用它們填充列表。如何將使用表模型的for循環轉換爲lambda表達式

我正在使用c#。

private List<String> GetCurrentListRows(GridTableModel modl, int col) 
    { 
     List<String> list = new List<String>(); 
     for (int i = 0; i < modl.RowCount+1; i++) 
     { 
      var listVal = modl.Model[i, col].Text; 
      if (listVal != "" && listVal != "Called") 
      { 
       list.Add(modl.Model[i, 9].Text); 
      } 
     } 
     return list; 
    } 

謝謝

+0

你能告訴我們你在做什麼與list.Add(modl.Model [i,9] .Text); – Muks

+0

modl.Model的數據類型是什麼? – daniel

+0

感謝您的快速回復! modl是網格中的表模型。用list.Add(modl.Model [i,9] .Text);我想用列中的行創建一個列表。 – ninjaxelite

回答

2
private List<String> GetCurrentListRows(GridTableModel modl, int col) 
{ 
    List<String> list = Enumerable 
     .Range(0, modl.RowCount) 
     .Where(i => modl[i, col].Text != "" && modl[i, col].Text != "Called") 
     .Select(i => modl[i, 9].Text) 
     .ToList(); 
    return list; 
} 
+0

我不得不在列表中添加+ 1列表 list = Enumerable.Range(0,modl.RowCount + 1)...因爲該模塊中的最後一個元素 – ninjaxelite

+0

你確定嗎? modl [modl.RowCount,0]應該拋出一個IndexOutOfRangeException。 – deramko

+0

它沒有,我有最後一個缺少列表元素與此 – ninjaxelite

1

試試下面這段代碼:

private List<String> GetCurrentListRows(GridTableModel modl, int col) 
    { 
     return modl.Where(listVal => (!String.IsNullorEmpty(listVal.Text)) 
       .Where(listVal => listVal.Text != "Called").Select(modl.Text).ToList(); 

    } 
+0

是的,我們不知道模型是什麼樣的。剛開始知道開發人員使用的是什麼模型。 – Muks

1

假設modl.Model是SomeClass的[] [] ...

private List<String> GetCurrentListRows(GridTableModel modl, int col) 
{ 
    return modl.Model.Where(a => a[col].Text != "" && a[col].Text != "Called") 
     .Select(a => a[9].Text) 
     .ToList(); 
} 
1

我不知道GridTableModel是如何構建的,但我想你可以做你的陳很容易。

首先,你必須創建一個擴展來扁平化你的二維數組。

public static class ArrayLinq 
    { 
     public static IEnumerable<KeyValuePair<string, string>> Flatten(this string[,] map, int colcheck, int colvalue) 
     { 
      for (int row = 0; row < map.GetLength(0); row++) 
      { 
       yield return new KeyValuePair<string, string>(map[row, colcheck], map[row, colvalue]); 
      } 
     } 
    } 

的第一個參數是適用於你的modl.Model,二是檢查列,最後一個是列皮卡。我返回一個KeyValuePair,因爲您需要輸入要檢查的列並將列(9)選爲值。但是,如你所願

那麼你的函數應該像這樣

private IList<string> GetCurrentListRows(GridTableModel modl, int col) 
{ 
    return modl.Model.Flatten(col, 9) 
     .Where(x => !string.IsNullOrEmpty(x.Key) && x.Key != "Called") 
     .Select(x => x.Value) 
     .ToList(); 
} 

這是函數式編程的一個很好的鍛鍊LINQ改變你可以改變它。