C#强制转换为var类型?

5 .net c# linq asp.net

我正在使用LinqToSQL处理ASP.NET应用程序.页面加载时我运行一个查询,并将结果保存到一个变量... var tasks = query expression.然后我将其保存到会话变量中Session["Tasks"] = tasks......

是否有可能施放此会话对象恢复到原来的状态变种,所以我可以运行的方法,如Count(),Reverse()等和?

谢谢

Mar*_*ell 15

var 这只是类型推断的简称......这里真正的问题是:什么是基础类型?

如果它涉及匿名类型(即新的{...}或其中的List<>那个),则没有优雅的方式(尽管它可以以一种黑客的方式完成).简而言之; 在这种情况下不要使用匿名类型...

需要注意的是查询表达式,如IQueryable<T>不是数据 -这是一个查询 -要存储的数据(高速缓存),你需要使用.ToList()/ .ToArray()等等.

重要提示:您不应在会话中存储查询表达式 ; 最好(内存中的会话提供程序),它将保持数据上下文的活跃性; 在最糟糕的情况下(数据库等会话提供程序)它将无法工作,因为数据上下文不可序列化.存储查询结果很好; 但否则,请按请求重建查询表达式.

在这种情况下,您可以使用(例如):

var tasksQuery = from task in ctx.Tasks
             where task.IsActive
             orderby task.Created
             select task; // this is IQueryable<Task>

Session["Tasts"] = tasksQuery.ToArray(); // this is Task[]
...
var tasks = (Task[]) Session["Tasts"]; // this is Task[]
Run Code Online (Sandbox Code Playgroud)