C#强制转换为var类型?

时间:2009-06-04 08:22:11

标签: c# .net asp.net linq

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

是否可以将此会话对象转换回其原始的var状态,因此我可以运行Count()Reverse()等方法?

由于

3 个答案:

答案 0 :(得分:15)

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

如果它涉及匿名类型(即新{...}或List<>那里),那么就没有优雅方式(虽然它可以用hacky方式完成)。简而言之;在这种情况下不要使用匿名类型...

请注意,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[]

答案 1 :(得分:4)

var不是一个类型,它只是告诉C#你找出类型。

string s = "Hello world!";

var s = "Hello world!";

是相同的,并给予相同的s。你可能错过了

using System.Linq

或其他一些添加您正在寻找的扩展方法。

答案 2 :(得分:0)

var不是一种“动态”类型,它只是意味着编译器根据初始化值的类型推断出实际类型。类型是静态确定的,不可能“转换为var”