默认情况下,同一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);