C# 在会话中存储之前强制计算匿名类型查询
我需要带回几个特定于用户的数据集,以绑定到经常(重新)加载(可能无法利用回发数据)的搜索页面的下拉列表。我想点击数据库一次,并在必要时从会话数据填充下拉列表,而不是再次从数据库获取 当我设置会话(下面最后一行)时,它会存储评估的结果,还是每次引用会话都会重新运行查询?如果是后一种情况,那么在设置会话之前强制求值的最佳方法是什么,同时仍然保持匿名类型的使用C# 在会话中存储之前强制计算匿名类型查询,c#,asp.net,linq-to-sql,operator-precedence,C#,Asp.net,Linq To Sql,Operator Precedence,我需要带回几个特定于用户的数据集,以绑定到经常(重新)加载(可能无法利用回发数据)的搜索页面的下拉列表。我想点击数据库一次,并在必要时从会话数据填充下拉列表,而不是再次从数据库获取 当我设置会话(下面最后一行)时,它会存储评估的结果,还是每次引用会话都会重新运行查询?如果是后一种情况,那么在设置会话之前强制求值的最佳方法是什么,同时仍然保持匿名类型的使用 public class CustomClass { public IQueryable Results1 { get; set; }
public class CustomClass
{
public IQueryable Results1 { get; set; }
public IQueryable Results2 { get; set; }
}
public static CustomClass GetResults()
{
var results1 = (
from t in Table
select new
{
t.Id,
t.Value
};
var results2 = (
from t in Table
select new
{
t.Id,
t.Value
};
return
new CustomClass
{
Results1 = results1,
Results2 = results2
};
}
*****
Session["Results"] = GetResults();
只需在result1
和result2
上使用.ToList()
return
new CustomClass
{
Results1 = results1.ToList(),
Results2 = results2.ToList()
};
我不确定知道答案是否有帮助。如果无法将会话[“结果”]转换回其原始类型,您打算如何使用它?也许您应该使用
System.Tuple
而不是匿名类型?这将允许您创建IQueryable
属性。@hvd,var results=(CustomClass)会话[“results”];ddl.DataSource=results.Results1;啊,好吧,这样你就不需要从代码中访问属性了。.ToList()
的结果只是IEnumerable
,而不是IQueryable
,因此这会导致编译器错误。因此,请更改自定义类中的类型。@John Saunders,我不相信我可以将CustomClass结果类型更改为列表,并且仍然保持匿名类型。重要的是,我不需要为所有这些数据集创建强类型类。我的意思是将它们更改为IEnumerable
。