Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对数据表进行排序会影响引用数据表_C#_Datatable - Fatal编程技术网

C# 对数据表进行排序会影响引用数据表

C# 对数据表进行排序会影响引用数据表,c#,datatable,C#,Datatable,我有一个类似于下面编写的方法(这只是我在C#中使用的伪代码): 上面的代码所做的是,它还对dt中的记录进行排序。我不明白它为什么这样做。请注意:此函数是从两个不同的位置调用的。在一个地方我发送一个Datatable对象,在另一个地方,Datatable直接从会话中存储的对象引用。没错。 您正在将dtChartTable变量设置为dt变量表示的相同内存。 因此,对dtChartTable进行排序会影响第二个数据库使用的相同DefaultView属性 如果不希望出现这种行为,可以使用 DataTab

我有一个类似于下面编写的方法(这只是我在C#中使用的伪代码):

上面的代码所做的是,它还对dt中的记录进行排序。我不明白它为什么这样做。请注意:此函数是从两个不同的位置调用的。在一个地方我发送一个Datatable对象,在另一个地方,Datatable直接从会话中存储的对象引用。

没错。 您正在将dtChartTable变量设置为dt变量表示的相同内存。 因此,对dtChartTable进行排序会影响第二个数据库使用的相同DefaultView属性

如果不希望出现这种行为,可以使用

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();