반응형
MVC를 이용할 경우 LINQ 를 이용해서 Database를 조작 하게된다.
일반적으로 조건 쿼리는 Whare 절에 => 구분을 통해 식별하고자 하는 컬럼을 가상화하여 비교하거나 조건을 걸 수 있다.
var data = dbModel.db.Where(p => p.id == item.id).ToList();
그런데 DateTime 같은 경우 다음과 같이 사용하게 되면, 코드상에서는 문제가 없지만 실제 구동시 오류가 발생한다.
var data = dbModel.db.Where(p => p.date >= DateTime.UtcNow.AddDays(-30)).ToList();
위 코드의 오류 내용을 보면, DateTime을 LINQ 안에 직접 선언해서 발생하는 문제로 보인다.
System.NotSupportedException:
'LINQ to Entities does not recognize the method 'System.DateTime AddDays(Double)' method,
and this method cannot be translated into a store expression.'
이를 변수로 따로 만들어서 다시 지정하면 해결이 가능하다.
DateTime beforedate = DateTime.UtcNow.AddDays(-30)
var data = dbModel.db.Where(p => p.date >= beforedate).ToList();
만약 Database의 값이 String이 아니라면?
오류 내용은 LINQ 저장소식으로 변환이 않된다는 것이다.
이부분도 생각해보면, LINQ는 Database에 질의할 문장이라 할 수 있는데, 아직 조회되지 않을 값을 통해 비교를 해야하기 때문에 오류가 발생하는것이다.
System.NotSupportedException:
'LINQ to Entities does not recognize the method 'System.DateTime ToDateTime(System.DateTime)' method,
and this method cannot be translated into a store expression.'
따라서 먼저 ToList 인자를 통해 값을 가져오고, 가져온 값을 Where로 비교하면 된다.
DateTime beforedate = DateTime.UtcNow.AddDays(-30)
var data = dbModel.db.ToList().Where(p => Convert.ToDateTime(p.date) >= beforedate)
반응형
'.Net' 카테고리의 다른 글
C#/.NET - DateTime 문자열 포맷 전체 (0) | 2024.02.23 |
---|---|
.NET/MVC - foreach loop 제한하기 (0) | 2024.02.23 |
.NET/C# - CS1555-Main 메서드에 지정된을(를) 찾을 수 없습니다. (0) | 2024.02.20 |
MVC - EntityFramework 동시성 충돌, 동일한 유형의 다른 엔티티가 이미 동일한 기본 키 값 사용 (0) | 2024.02.20 |
MVC - MYSQL, 최대 길이가 ‘250’인 문자열 또는 배열 형식이어야 합니다. (0) | 2024.02.20 |