如何使用表模型将for循环转换为lambda表达式

时间:2015-08-19 09:50:07

标签: c# lambda tablemodel

有没有办法将此循环转换为Lambda表达式? 我希望从列中获取某些行,并通过检查列表值是否为空或“#39;”来填充列表。

我正在使用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;
    }

谢谢

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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(); 

    }

答案 2 :(得分: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();
}

答案 3 :(得分:1)

我不知道GridTableModel是如何构建的,但我想你可以轻松地进行更改。

首先,您必须创建一个扩展来展平您的2D阵列。

   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功能编程练习。