我正在使用linq查询填充对象模型。该模型如下所示:
MyModel{
DateTime AppointDate {get; set;}
int TotalAppoints {get; set;}
int AppointDuration {get; set;}
}
linq-to-sql查询如下所示:
public static GetAppointsFromDB(params){
var MyQuery = from....where...
select new MyModel{
AppointDate = ...,
TotalAppoints = ...,
AppointDuration =...};
return MyQuery as MyModel;}
在母版页中,我希望在会话中加载此查询的结果,如下所示:
if (Session["Appoints"] == null) {Session["Appoints"] = GetAppointsFromDB(...);}
当我运行代码时,会话始终为null。我刚刚第二次添加了这一行,然后再次运行查询。当我想在代码中的某个其他位置使用会话时,它也是空的。查询有效,因为当我在return语句上放置断点时,我看到对象已正确填充。
请让我知道问题的来源,我仍然坚持这个看似简单的问题而且我没有看到我做错了什么。
感谢您的建议。
答案 0 :(得分:1)
public static GetAppointsFromDB(params)
{
var MyQuery = from....where...
select new MyModel{
AppointDate = ...,
TotalAppoints = ...,
AppointDuration =...};
return MyQuery as MyModel;
}
我们假设此方法实际返回MyModel
,所以:
public static MyModel GetAppointsFromDB(params)
现在您所看到的可能是MyQuery
导致某些内容无法转换为MyModel
,这就是为什么它返回null - 为什么在第一个中需要As
运算符地点?如果您的查询始终返回MyModel
类型的单个实例,那么您应该
return MyQuery;
如果您的查询包含MyModel的枚举(这就是它的样子)并且您只想返回一个可以使用的
return myQuery.FirstOrDefault();
代替。
答案 1 :(得分:0)
最有可能的是,MasterPage.Load事件在Page.Load事件之后触发。 尝试使用Master Page的Init事件,该事件将在Load事件之前运行。
答案 2 :(得分:0)
您尝试投射时,MyQuery
变量的类型为IQueryable<MyQuery>
,而非MyModel
。因此,此行return MyQuery as MyModel
返回null
。
尝试将其更改为例如。
var MyQuery = from....where...
select new MyModel{
AppointDate = ...,
TotalAppoints = ...,
AppointDuration =...};
return MyQuery.ToList();
它应该有用。