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

本文关键字:Linq 变量 问题 添加 ViewState | 更新日期: 2023-09-27 18:18:36

我有以下LINQ语句:

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

我将s1添加到ViewState中,得到以下错误:

类型system . string,‘System.Linq.Enumerable + WhereSelectArrayIterator 2 [[mscorlib, Version=2.0.0.0, Culture=neutral,都必须要]、[系统。字符串,mscorlib,版本=2.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]]'在装配系统中。核心,版本=3.5.0.0,文化=中性,PublicKeyToken=b77a5c561934e089'未标记为可序列化。

如何解决这个问题,如何将LINQ变量添加到ViewState

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

您不能直接这样做,因为您想要添加到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); 

总的来说,从这个例子中并不能清楚地看出你在这里想要达到什么目的。

你已经有了一个数组,所以在ViewState中存储str

ViewState.Add("str", str);