与在ViewState中添加Linq变量相关的问题

时间:2011-12-20 12:29:32

标签: c# asp.net vb.net linq

我遵循LINQ声明:

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

我在s1中添加了ViewState,我收到了以下错误:

  

类型   “System.Linq.Enumerable + WhereSelectArrayIterator`2 [[System.String,   mscorlib,版本= 2.0.0.0,文化=中性,   PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,   Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'   在Assembly'System.Core,Version = 3.5.0.0,Culture = neutral,   PublicKeyToken = b77a5c561934e089'未标记为可序列化。

如何解决此问题以及如何将LINQ变量添加到ViewState

2 个答案:

答案 0 :(得分:5)

你不能直接这样做,因为你想要添加到ViewState的任何内容必须是可序列化的(用SerializableAttribute标记),正如编译器告诉你的那样。 s1的运行时类型是System.Linq.Enumerable中的嵌套泛型类,它没有该属性。

您可以做的一件事是在添加变量之前调用.ToArray()(或其他类似的方法):

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

当然,这是毫无意义的,因为你可以用

达到同样的效果
string[] str = { "a", "ab", "abcd" }; 
ViewState.Add("str", str); 

总的来说,从示例中不清楚你想要在这里实现什么。

答案 1 :(得分:1)

您已有一个数组,因此请在ViewState中存储str

ViewState.Add("str", str);