대답 :이 질문에 대한 내 대답을 찾으려면 아래로 이동하십시오.SharePoint OData 서비스를 쿼리 할 때 LINQ의 날짜 비교 사용
LINQ를 사용하여 ASP.NET MVC 3 프로젝트에서 SharePoint 2010 OData를 사용하려고합니다. Razor 뷰 엔진 (VS 2010)과 함께 ASP.NET MVC 3 프로젝트 템플릿을 사용하여 기본 프로젝트를 만들었습니다. SharePoint 2010 사이트를 가리키는 서비스 참조를 추가했습니다.
내 HomeController의 Index 메서드 (이것은 단지 테스트 프로젝트 임)에서 컨텍스트를 보유하고 컨텍스트 변수의 Credentials 속성을 현재 기본 자격 증명으로 설정하는 변수를 만들었습니다.
다음과 같은 링크 쿼리가 잘 작동하고 내가 어떤 데이터에 액세스하기 위해 만든 변수를 사용할 수 있습니다 : SharePoint 사이트에서
이 쿼리는 단순히 목록에서 공지 사항을 모두 얻을 수
var query = from a in context.Alerts
select a;
라는 경고 . 이 목록에는 제목, 내용, 시작 날짜 및 만료 날짜 필드가 있습니다. 내가 다음에 쿼리를 변경할 때
, 내가 예상 결과를 얻을하지 않습니다
var query = from a in context.Alerts
where (a.Begins < DateTime.Now)
select a;
이 쿼리는 날짜의 시간 구성 요소를 무시합니다. 예를 들어, a.Begins에 어제의 datetime이 포함되어 있으면 쿼리가 AlertItem을 반환합니다. 반면에 a.Begins에 현재 날짜가있는 datetime이 포함되어 있으면 (이전 시간) 비교 결과는 false를 반환하고 a.Begins == DateTime.Now는 true를 반환합니다.
var query = (from a in context.Alerts
select a).ToList();
var query2 = from q in query
where (q.Begins < DateTime.Now)
select q;
내가 무엇을 놓치고 : 다음과 같은 처리를 할 경우
는 두 번째 LINQ 쿼리는 예상대로 작동?
아니요. SharePoint 2010 OData 원본에 대해 쿼리하지 않을 때 잘 작동합니다. 필자가 묘사 한 동작은 SharePoint 2010 OData 원본과 비교할 때만 발생합니다. 그러나 귀하의 질문에 대답; 아니, 나는 DateTime을 사용하지 않고있다. 오늘. – RWGodfrey
사실 a.Begins == DateTime.Now는 매우 이상합니다 ... 또한 "메모리에있는"레코드가있는 것처럼 들립니다. 즉, 첫 번째 쿼리에서 DateTime 절이 올바르게 작동합니다. DateTime 주변에 OData와 관련된 알려진 문제점이 있습니까? – Joe
지금까지 Bing/Google/Yahoo 검색 시간과 더 많은 시행 착오 검색 시간이 없었습니다. SharePoint 2010에 대한 액세스 권한이있는 사용자가 유사한 테스트를 실행하고 결과를보고하기를 바랍니다. – RWGodfrey