我有一个属性List
public User ReturnUser(int id)
{
var q = this.Users.Where(x => x.Id == id);
return q.ToList()[0];
}
在主要:
User newUser = ud.ReturnUser(0);
Console.WriteLine(newUser.Name);
newUser.Name = "john";
Console.WriteLine(ud.Users[0].Name);
我认为AsNoTracking()
可能是您想要的方式。
public User ReturnUser(int id)
{
return this.Users.AsNoTracking().FirstOrDefault(x => x.Id == id);
}
此链接提供有关AsNoTracking()
的更多信息,但是以上内容可以实现您想要实现的目标。
如果您的User对象仅包含原始属性,则可以添加此方法:
public User ShallowCopy(){
return (User)this.MemberwiseClone();
}
然后执行此操作:
//note: no error handling if ID not found
public User ReturnUser(int id)
{
return this.Users.Single(x => x.Id == id).ShallowCopy();
}
如果您的用户包含复杂的类型属性,如果您不希望这些属性仅作为引用,则必须实现深层复制。>
[The fine manual有足够的话要说和一些很好的例子
首先,如果您只参加第一个比赛,请使用FirstOrDefault()
而不是Where()
。>
然后,您可以只返回结果的Clone: