LINQ 식에서 Func 대리인에 문제가 있습니다. 이 방법의 문제가있는 부분 (repository.Items가 IQueryable<T>)
이다.LINQ 식의 Func 매개 변수
public static ActionResult XXX<T>(IRepository<T> repository,
Func<T, int> keyExtractor, int id = 0)
{
if (id == 0) return ...
T item = repository.Items.Where(x => keyExtractor(x) == id).
FirstOrDefault();
if (item == null) return ...
try {
repository.DeleteItem(item);
return ...
} catch (Exception e) {
return ...
}
}
하지만 난이 방법을 실행하면, 내가 LINQ 개체에서 지원되지 않는 노드의 유형과 같은 오류가 나는 또한 시도 predikate와 버전 만 나는 운이 전혀했다
모든 아이디어를 어떻게 해결
나는 하나의 가능한 방법을 찾을 내가 처음과 같이 실행을 강제해야한다, 그래서 LINQ가 실행을 지연 수행합니다.?.
T item = repository.Items.AsEnumerable().Where(x => keyExtractor(x) == id)
것은 전체 오류 텍스트를 볼 것이 좋을 것이다
은 (그런데 당신은Where
확장 방법은repository.Items.FirstOrDefault(x => keyExtractor(x) == id)
을 쓸 수 ...IQueryable<T>
및IEnumerable<T>
,하지만 같은 인수에 대해 동일한 이름을 가진 전체 메서드뿐만 아니라 –아, 알아 냈어 .LINQ 표현식은 AsEnumerable() 메서드 또는 다른 유사 함수에 의해 먼저 실행되어야합니다. – MilanG
그러면이 질문을 대답으로 게시하고이를 표시해야합니다. 다른 사람들이 같은 것을 검색 할 때 –