Problem with adding the Linq variable in ViewState

advertisements

I have following LINQ statement:

    string[] str = { "a", "ab", "abcd" };
    var s1 = from s in str.AsEnumerable()
             select s;
    ViewState.Add("str", s1);

I added s1 into ViewState and I got following error:

Type 'System.Linq.Enumerable+WhereSelectArrayIterator`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' in Assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.

How can I solve this problem and how can I add the LINQ variable into ViewState?


You cannot do this directly, because whatever you do want to add to ViewState must be serializable (marked with SerializableAttribute) as the compiler is telling you. The runtime type of s1 is a nested generic class within System.Linq.Enumerable, which does not have that attribute.

One thing you could do is call .ToArray() (or another similar method) before adding the variable:

string[] str = { "a", "ab", "abcd" };
var s1 = from s in str.AsEnumerable() select s;
ViewState.Add("str", s1.ToArray());

Of course, this is pointless as it stands because you could have achieved the same effect with just

string[] str = { "a", "ab", "abcd" };
ViewState.Add("str", str);

Overall, it's not clear from the example what you are trying to achieve here.