LINQ, XXX 형식의 상수 값을 만들 수 없습니다. 이 컨텍스트에서는 기본 유형 또는 열거 유형 만 지원됩니다.
내 응용 프로그램에는 강사가 있고 그들이 가르 칠 수있는 강좌 목록이 있으며 강좌를 삭제할 때 강사와의 연결을 제거하고 싶습니다. 코드는 다음과 같습니다.
public void RemoveCourse(int courseId)
{
using (var db = new AcademicTimetableDbContext())
{
var courseFromDb = db.Courses.Find(courseId);
var toRemove = db.Lecturers
.Where(l => l.Courses.Contains(courseFromDb)).ToList();
foreach (var lecturer in toRemove)
{
lecturer.Courses.Remove(courseFromDb);
}
db.SaveChanges();
}
}
하지만 작동하지 않습니다. 나는 얻다
NotSupportedException : 유형의 상수 값을 만들 수 없습니다
Course
. 이 컨텍스트에서는 기본 유형 또는 열거 유형 만 지원됩니다.
내가 도대체 뭘 잘못하고있는 겁니까?
Contains
원시 값이 아닌 값 에는 사용할 수 없습니다 . 하다
Where(l => l.Courses.Select(c => c.CourseId).Contains(courseId)
(또는 사용하는 Id 필드).
DbContext를 사용하는 경우 .Local 컬렉션을 쿼리 할 수 있으며 == 연산자는 개체에서도 작동합니다.
public void RemoveCourse(int courseId)
{
using (var db = new AcademicTimetableDbContext())
{
var courseFromDb = db.Courses.Find(courseId);
db.Lecturers.Load() //this is optional, it may take some time in the first load
//Add .Local to this line
var toRemove = db.Lecturers.Local
.Where(l => l.Courses.Contains(courseFromDb)).ToList();
foreach (var lecturer in toRemove)
{
lecturer.Courses.Remove(courseFromDb);
}
db.SaveChanges();
}
}
.Local은 ObservableCollection이므로 내부에서 원하는 것을 비교할 수 있습니다 (객체 비교를 지원하지 않는 SQL 쿼리에 국한되지 않음). .Local 컬렉션에있는 모든 개체를 가져 오기 위해 .Local을 호출하기 전에 db.Lecturers.Load () 메서드를 호출하여 모든 데이터베이스 항목을 Local 컬렉션으로 가져올 수 있습니다.
Courses
아래 줄 의 컬렉션은 null이거나 비어 있어야합니다.
var toRemove = db.Lecturers
.Where(l => l.Courses.Contains(courseFromDb)).ToList();
당신이 통과 경우에도 발생할 수 있습니다 Func<T, bool>
여기에 같은 동적 조건을 작성하는 경우 ()하는 방법으로에 여기 대리자는 SQL로 변환 할 수없는 이유.
동등성에 대한 의미를 지정하지 않은 경우 복합 유형을 비교할 수 없습니다.
예외 세부 사항에서 알 수 있듯이 기본 값 (예 : Integer)을 확인해야합니다.
And better to use Any()
method instead.
var toRemove = db.Lecturers
.Where(l => l.Courses.Any(p=>p.Id == courseFromDb.Id)).ToList();
'Programing' 카테고리의 다른 글
node.js 대 sinatra 대 레일을 언제 사용합니까? (0) | 2020.12.05 |
---|---|
IntellJ IDEA "기호를 확인할 수 없음"및 "방법을 확인할 수 없음" (0) | 2020.12.05 |
rails 4 자산 파이프 라인 공급 업체 자산 이미지가 사전 컴파일되지 않습니다. (0) | 2020.12.05 |
Selenium WebDriver에서 브라우저 너비와 높이를 어떻게 설정합니까? (0) | 2020.12.05 |
두 데이터 프레임을 비교하고 차이점 얻기 (0) | 2020.12.05 |