6

混乱しています

シナリオ:

別の DataSet に追加する DataTable のコピーを作成したいと考えています。それを行うには2つの方法があります(AFAIK):

1. Make a Copy using DataTable.Copy()
2. Make a Deep Clone using 

public static T DeepClone<T>(this T source)
{
    if (!typeof(T).IsSerializable)
        throw new ArgumentException("The type must be serializable.", "source");

    // Don't serialize a null object, simply return the default for that object
    if (Object.ReferenceEquals(source, null))
        return default(T);

    IFormatter formatter = new BinaryFormatter();
    Stream stream = new MemoryStream();
    using (stream)
    {
        formatter.Serialize(stream, source);
        stream.Seek(0, SeekOrigin.Begin);
        return (T)formatter.Deserialize(stream);
    }
}

私の混乱:

  1. それを行う他の方法はありますか?
  2. どちらが優れているのか、その理由は?
  3. DataTable.Copy()内部で使用するかDeepClone、または他のロジックを使用しますか?
4

2 に答える 2

3

ささいなことを見逃していない限り、次のようなことができないのはなぜですか

DataSet source = GetMySourceDataSet();
DataSet destination = new DataSet();

DataTable orders = source.Tables["SalesOrderHeader"];

// Query the SalesOrderHeader table for orders placed  
// after August 8, 2001.
IEnumerable<DataRow> query =
    from order in orders.AsEnumerable()
    where order.Field<DateTime>("OrderDate") > new DateTime(2001, 8, 1)
    select order;

// Create a table from the query.
DataTable modifiedOrders = query.IsAny() ? query.CopyToDataTable<DataRow>() : new DataTable();
destination.Tables.Add(modifiedOrders);

小さなヘルパー

public static class Utils {
    public static bool IsAny<T>(this IEnumerable<T> data) {
        return data != null && data.Any();
    }
}
于 2012-10-05T08:08:42.633 に答える