将foreach转换为LINQ语句

时间:2017-08-10 07:58:09

标签: c# linq expression

linq表达的是什么?我不知道如何将foreach语句更改为linq表达式。

public static IList<T> ToList<T>(this System.Data.DataTable table, Dictionary<string, string> mappings)
        where T : new()
    {
        IList<PropertyInfo> properties = typeof (T).GetProperties().ToList();
        IList<T> result = new List<T>();

        foreach (var row in table.Rows)
        {
            var item = CreateItemFromRow<T>((System.Data.DataRow) row, properties, mappings);
            result.Add(item);
        }

        return result;
    }

1 个答案:

答案 0 :(得分:1)

您可以使用简单的Select()语句。但由于DataTable.RowsDataRowCollection而未实现IEnumerable<DataRow>,因此您需要先调用OfType<DataRow>()

public static IList<T> ToList<T>(this System.Data.DataTable table, Dictionary<string, string> mappings)
    where T : new()
{
    IList<PropertyInfo> properties = typeof(T).GetProperties().ToList();

    return table.Rows.OfType<DataRow>().Select(row => CreateItemFromRow<T>(row, properties, mappings))
              .ToList();        
}

正如Harald在评论中建议的那样,您可以使用Cast<DataRow>代替OfType<DataRow>。不同之处在于OfType检查是否可以进行强制转换并仅返回可投射元素,Cast将强制转换所有元素(如果强制转换无效则抛出)。由于我们知道此集合中的所有元素都是DataRow类型,因此我们可以节省检查时间。