我正在使用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)