应答时:去下面找我回答这个问题。使用日期比较查询的SharePoint OData服务
我试图使用LINQ的ASP.NET MVC 3项目消耗的SharePoint 2010的OData。我使用带有Razor视图引擎的ASP.NET MVC 3项目模板(VS 2010)创建了一个默认项目。我添加了一个指向我的SharePoint 2010网站的服务参考。
在我的HomeController的Index方法(这只是一个测试项目),我创建了一个变量来保存上下文和上下文变量的凭据属性设置为当前默认凭据。
像下面的链接查询工作正常,我可以使用创建的变量来访问任何数据:
var query = from a in context.Alerts
select a;
这个查询只是获取所有的公告,从列表中的SharePoint网站称为警报。此列表包含标题,内容,开始日期和到期日期的字段。
当我查询更改为以下,我没有得到预期的结果:
var query = from a in context.Alerts
where (a.Begins < DateTime.Now)
select a;
该查询忽略了日期的时间部分。例如,如果a.Begins包含昨天的日期时间,则查询将返回AlertItem。另一方面,如果a.Begins包含具有当前日期的日期时间(但是较早的时间),则比较返回false(并且a.Begins == DateTime.Now返回true)。
如果我这样做,第二LINQ查询按预期工作:
var query = (from a in context.Alerts
select a).ToList();
var query2 = from q in query
where (q.Begins < DateTime.Now)
select q;
我缺少什么?
号时,针对SharePoint 2010中的OData源未查询它工作得很好。我描述的行为仅在针对SharePoint 2010 OData源时才会发生。但要回答你的问题;不,我没有在任何地方使用DateTime.Today。 – RWGodfrey
事实上,a.Begins == DateTime.Now是很奇怪的...另外,它听起来像一旦你有记录“在内存中”,即在第一个查询中,DateTime子句工作得很好......我想知道如果在DateTime周围有任何已知的OData问题? – Joe
到目前为止,必应/谷歌/雅虎搜索小时以及更多小时的反复试验一无所获。我希望有人能够访问SharePoint 2010将运行类似的测试并报告其结果。 – RWGodfrey