默认情况下,同一Linq查询都会收到对内存中同一对象的引用。
此时不论更改第几次的查询结果,都将映射到对象的引用。
此时,若需要对某个结果进行快照并做其他修改,则需要对此对象进行克隆。
本代码将利用MemoryStream对内存中的对象进行复制。
public static class CloneEntityHelper {
public static T Clone<T>(T source) {
var dcs = new System.Runtime.Serialization.DataContractSerializer(typeof(T));
using (var ms = new System.IO.MemoryStream()) {
dcs.WriteObject(ms, source);
ms.Seek(0, System.IO.SeekOrigin.Begin);
return (T)dcs.ReadObject(ms);
}
}
}
使用示例:
var source = myQuery.First(); var cloned = Clone(source);