2010-06-17 3 views
1

내가 사용하는 경우내가 왜 tolist를 사용하지 않았을 때 datetime.now가 작동하지 않습니까?

datacontext.News 
    .Where(p => p.status == true) 
    .Where(p => p.date <= DateTime.Now) 
    .ToList(); 

결과가 반환되지 않습니다 시스템;

내가 기대했던 결과를 반환합니다

datacontext.News 
    .Where(p => p.status == true) 
    .ToList() 
    .Where(p => p.date <= DateTime.Now) 
    .ToList(); 

시스템을 사용합니다. 누가 무슨 일인지 말해 줄 수 있니?

미리 감사드립니다.

+1

bool 인 경우 '== true'가 필요하지 않습니다. 그냥 p => p.status가있는 곳에서 호출하십시오. – Femaref

+2

백그라운드에서 실행되는 SQL 쿼리를 표시 할 수 있습니까? datacontext에 TextWriter를 연결하여이 작업을 수행 할 수 있습니다. 예 :'datacontext.Log = Console.Out;'. – Steven

+0

두 번째'Where' 절을 제거하면 어떤 식으로식이 반환됩니까? – ChrisF

답변

4

데이터베이스 서버의 시간 설정과 개발자 컴퓨터 (또는 .NET을 실행하는 컴퓨터)의 시간 설정이 서로 다릅니다.

두 조각의 차이점은 두 번째 조각에서 조건 p.date <= DateTime.Now이 데이터베이스 서버가 아니라 로컬로 실행된다는 것입니다. 로컬 시간을 사용하려면

, 당신은이 작업을 수행 할 수 있습니다

var now = DateTime.Now; 
var newNews = datacontext.News 
    .Where(p => p.status == true) 
    .Where(p => p.date <= now) 
    .ToList(); 
0

난 당신이 이런 식으로 물어 필요가 있다고 생각 ...

datacontext.News 
    .Where(p => p.status == true && p.date <= DateTime.Now) 
    .ToList(); 

또는

datacontext.News 
    .Where(p => p.status && p.date <= DateTime.Now) 
    .ToList(); 

"== true"는 질문을 조금 더 잘 이해하는 데 도움이됩니다.

+0

이 방법이 더 좋지만 체인에서 동일한 결과를 만들어 내야하는 곳을 찾고 있습니다. –

+0

@Leom 연쇄 화가 처음에는 List가 다시 작동해야한다고 생각합니다. 어쩌면 SQL에 linq에 체인에 대한 문제 – Aristos

1

왜 복수 .Where()을 사용해야합니까?

datacontext.News 
    .Where(p => p.status && p.date <= DateTime.Now) 
    .ToList(); 

도 작동합니다.

또한 작동하지 않는 이유는 예상대로 이해하는 데 도움이 될 수 있습니다이 답변 : Can multiple compiled linq queries be chained together?

+0

-1 : 그는 컴파일 된 쿼리를 사용하지 않으며 Queryable 체인에 문제가 없습니다. –

0

닷넷 평가 날짜 비교와 SQL 사이의 차이; ToList()는 응답을 실행하므로 두 번째는 LINQ to Objects를 사용하고 있다고 생각합니다. 날짜 비교를 위해, 당신은 또한 SqlMethods

http://msdn.microsoft.com/en-us/library/system.data.linq.sqlclient.sqlmethods_members.aspx

을 고려할 수 있습니다 그래서 당신은 사용할 수 있습니다

SqlMethods.DateDiffDay(d1, d2) > 0 

하는 날짜가 아직 당신을 위해 작동하지 않는 경우.

HTH.

0

디버거에서 결과를 확인하여 데이터베이스 서버의 시간과 현지 시간의 차이점을 확인하십시오.

var result = datacontext.News 
    .Take(1) 
    .Select(n => DateTime.Now) 
    .ToList() 
    .Select(x => new {SqlTime = x, LocalTime = DateTime.Now}) 
    .Single(); 
관련 문제