C# 添加到常规列表属性并保存在viewstate中

C# 添加到常规列表属性并保存在viewstate中,c#,linq,generics,properties,viewstate,C#,Linq,Generics,Properties,Viewstate,我使用通用列表在viewstate中存储一组数据。如果我尝试在get访问器中使用linq对列表进行排序,那么当我尝试向列表中添加新项时,如果不起作用。没有错误,只是没有将其添加到列表中 当我运行这行代码时: MyObjectList.Add(new MyObject()); 使用此属性不起作用: public List<MyObject> MyObjectList { get { if (ViewState["MyObjectList"] == null)

我使用通用列表在viewstate中存储一组数据。如果我尝试在get访问器中使用linq对列表进行排序,那么当我尝试向列表中添加新项时,如果不起作用。没有错误,只是没有将其添加到列表中

当我运行这行代码时:

MyObjectList.Add(new MyObject());


使用此属性不起作用:

public List<MyObject> MyObjectList
{
   get
   {
      if (ViewState["MyObjectList"] == null)
         ViewState["MyObjectList"] = GetDataFromDataBase();
      return ((List<MyObject>)ViewState["MyObjectList"]).OrderBy(x => x.MyObjectID).ToList();
   }
}
公共列表MyObjectList
{
得到
{
if(ViewState[“MyObjectList”]==null)
ViewState[“MyObjectList”]=GetDataFromDataBase();
return((List)ViewState[“MyObjectList”]).OrderBy(x=>x.MyObjectID.ToList();
}
}


但使用此属性确实可以(尽管现在每次获取后我都必须进行排序):

公共列表MyObjectList
{
得到
{
if(ViewState[“MyObjectList”]==null)
ViewState[“MyObjectList”]=GetDataFromDataBase();
返回(列表)视图状态[“MyObjectList”];
}
}



如何对get访问器中的数据进行排序?

.ToList创建列表的副本。您正在添加到原始列表中,而不是添加到原始列表中。

猜测一下,这是因为使用LINQ将始终创建原始列表的已排序副本,而不是将其就地排序。
public List<MyObject> MyObjectList
{
   get
   {
      if (ViewState["MyObjectList"] == null)
         ViewState["MyObjectList"] = GetDataFromDataBase();
      return (List<MyObject>)ViewState["MyObjectList"];
   }
}