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

gha*_*ani 0 c# linq vb.net asp.net

我遵循LINQ声明:

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

我加入s1ViewState,我得到以下错误:

输入'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]]'在Assembly'System.Core,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未标记为可序列化.

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

Jon*_*Jon 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()); 
Run Code Online (Sandbox Code Playgroud)

当然,这是毫无意义的,因为你可以用公正的方式达到同样的效果

string[] str = { "a", "ab", "abcd" }; 
ViewState.Add("str", str); 
Run Code Online (Sandbox Code Playgroud)

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