匿名类型的扩展方法

时间:2014-11-26 11:54:33

标签: c# datatable extension-methods

我有DataTable,我想更新其记录。我想更新多列的记录,我想为此编写扩展方法。我不确定它会接受什么参数以及它将返回什么。我的代码

public static class ExtensionClass
{
    public static IEnumerable<object> UpdateColumns(this IEnumerable<object> e, List<string> columns, List<object> values)
    {
        int index = 0;
        var rec = e.First();
        foreach (string col in columns)
        {

        }
    }
}

我在SetField()上没有rec这样的内容。我缺少什么?

2 个答案:

答案 0 :(得分:0)

显然,在这种情况下,rec是对象的类型,因此它不具有SetField()方法。您应该声明IEnumerable&lt;&gt;的类型。 你看看了吗: http://msdn.microsoft.com/en-us/library/bb336477%28v=vs.110%29.aspx

答案 1 :(得分:0)

  

我有一个DataTable,我想更新它......

因此,您希望为dataTable编写扩展方法。

  

我想更新多列的记录......

我认为您希望将dataTable的所有行的列值更新为特定值。我建议您使用library(tidyverse) df2 <- df %>% mutate(rows = map(rows, seq)) %>% unnest() 而不是IDictionary<string, TValue>之类的单独列表,然后扩展方法可以是这样的:

List<string> columns, List<object> values

并称之为:

public static void UpdateColumns<TValue>(this DataTable dataTable,
    IDictionary<string, TValue> columnValuePair)
{
    foreach (DataRow dataRow in dataTable.Rows)
    {
        foreach (var pair in columnValuePair)
        {
            dataRow[pair.Key] = pair.Value;
        }
    }
}
  

请注意,您无需返回var columnValuePair = new Dictionary<string, string> { {"ColumnName1", "newValue1" }, {"ColumnName2", "newValue2" } }; yourDataTable.UpdateColumns(columnValuePair); 作为此扩展方法的结果,并将其设置为DataTable