2011-11-30 50 views
3

我正在使用通用列表来存储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(); 
    } 
} 



但使用这个属性呢(虽然现在我有每次获取后进行排序):

public List<MyObject> MyObjectList 
{ 
    get 
    { 
     if (ViewState["MyObjectList"] == null) 
     ViewState["MyObjectList"] = GetDataFromDataBase(); 
     return (List<MyObject>)ViewState["MyObjectList"]; 
    } 
} 



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

+1

有人猜测,这是因为使用LINQ将始终创建原始列表的排序副本,而不是将其排序。 – millimoose

回答

3

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