C# 对数据表进行排序会影响引用数据表
我有一个类似于下面编写的方法(这只是我在C#中使用的伪代码): 上面的代码所做的是,它还对dt中的记录进行排序。我不明白它为什么这样做。请注意:此函数是从两个不同的位置调用的。在一个地方我发送一个Datatable对象,在另一个地方,Datatable直接从会话中存储的对象引用。没错。 您正在将dtChartTable变量设置为dt变量表示的相同内存。 因此,对dtChartTable进行排序会影响第二个数据库使用的相同DefaultView属性 如果不希望出现这种行为,可以使用C# 对数据表进行排序会影响引用数据表,c#,datatable,C#,Datatable,我有一个类似于下面编写的方法(这只是我在C#中使用的伪代码): 上面的代码所做的是,它还对dt中的记录进行排序。我不明白它为什么这样做。请注意:此函数是从两个不同的位置调用的。在一个地方我发送一个Datatable对象,在另一个地方,Datatable直接从会话中存储的对象引用。没错。 您正在将dtChartTable变量设置为dt变量表示的相同内存。 因此,对dtChartTable进行排序会影响第二个数据库使用的相同DefaultView属性 如果不希望出现这种行为,可以使用 DataTab
DataTable dtChartTable = dt.Copy();
但这样做成本很高,因为这样每个数据行都会重复。另一种可能性是创建新的DataView
DataView view = new DataView(dt);
view.Sort = "SomeColumnName";
......
这不会影响原始的dt.DefaultView,您可以在执行此操作时从新的DataView处理datarowview
DataTable dtChartTable = dt;
它创建了一个新副本,但都引用了内存中的相同位置,因为Datatable是引用类型,所以您在其中一个中的更改反映在另一个中
取而代之的是
DataTable dtChartTable = dt.Copy();
这会复制并引用内存中的不同位置。一个表中的更改不会反映在另一个表中。是,因为Datatable是引用类型,所以它会这样做。我可以执行dt.Clone()然后将行导入dtChartTable吗?它的成本是否与dt.Copy()一样高?在我看来,DataView是最好的选择。如果您只对排序感兴趣,那么就没有理由这么做。只是创建一个不同的数据视图。是的,我也需要做一些选择操作,但我想那很好。我也可以在DataView上做这些。谢谢朋友们!
DataTable dtChartTable = dt.Copy();