본문 바로가기
MySql

MySQL LINQ의 날짜 차이 논리

by 베이스 공부 2020. 12. 14.
반응형

두 개의 다른 데이터베이스 테이블에서 데이터에 액세스 한 다음 C #의 LINQ를 사용하여 두 필드에서 함께 조인하려고합니다. 나는 논리적으로 건전한 전반적인 작업 접근 방식을 가지고 있다고 믿습니다. 내가 겪고있는 문제의 일부는 테이블에 너무 많은 데이터가 있고 충돌을 일으킬 수 있기 때문에 두 테이블을 조인하기 전에 두 테이블의 데이터를 필터링한다는 것입니다.

가장 큰 문제는 테이블 중 하나의 경우 타임 스탬프 (열) 값이 오늘 인 데이터 만 가져와야한다는 것입니다. 타임 스탬프 값은 System.DateTime? 유형입니다.

몇 가지 다른 방법을 시도했습니다.

        DateTime? currentDate = System.DateTime.Now;

        var second_data = (from b in this.database.table
            where EntityFunctions.DiffDays(b.timeStamp.Value, currentDate) == 0
            select b);

데이터베이스에 처리 할 기능이 없기 때문에 이것이 작동하지 않는다는 인상을 받았습니다. 내부 예외 : '{ "FUNCTION database.DiffDays does not exist"}'

        var second_data = (from b in this.database.table
            where b => b.timeStamp.Value.Date == DateTime.Now.Date
            select b);

LINQ to Entities에서 '지정된 형식 멤버'Date '가 지원되지 않기 때문에 작동하지 않습니다. 이니셜 라이저, 엔터티 멤버 및 엔터티 탐색 속성 만 지원됩니다. '

        var second_data =
            this.database.table.Where(sd => sd.timeStamp.Value.Date == DateTime.Now.Date);

그러나 이것은 .Date의 사용 때문에 다시 실패합니다.

불행히도 모든 데이터를 저장할 메모리가 없기 때문에 모든 데이터를 먼저 가져온 다음 날짜 논리를 실행할 가능성은 의문의 여지가 없습니다. 이 문제를 해결할 수있는 방법에 대한 통찰력을 줄 수있는 사람이 있다면 대단히 감사하겠습니다. 감사합니다.

 

해결 방법

 

오늘 (또는 특정 날짜 범위)에 대해서만 테이블에서 행을 가져 오려면 간단히 이렇게하면됩니다. 이 접근 방식의 좋은 점은 특정 날짜 또는 날짜 범위의 두 경우 모두에서 작동한다는 것입니다.

// specify date range (without time)    
DateTime currentDate = System.DateTime.Now.Date;
DateTime nextDate = currentDate.AddDays(1);

var second_data = from b in this.database.table 
                  where b.timeStamp.Value >= currentDate 
                  and b.timeStamp.Value < nextDate
                  select b;

 

참조 페이지 https://stackoverflow.com/questions/21000287

 

 

반응형

댓글