저는이 문제에 대해 여러 번 돌아 왔고 몇 시간 동안 봤습니다. 지금도이 글을 쓰면서 위 제시된 중복은 도움이되지 않습니다.ODAC/Oracle Linq to Entities GroupBy FirstOrDefault와 동일합니다.
나는 다음과 같은 소프트웨어를 사용하고 있습니다 :
- 닷넷 프레임 워크 4.5
- 오라클 11.2.0.3.0을 (분명히)
- 엔티티 프레임 워크 5.0
- MVC 4
- ODAC의 12C (충분한 정보인지 확실하지 않음)
ID 칼럼을 포함하고 있습니다 (그러나 이것은 유일하지 않습니다!), 다른 컬럼들, 그리고 "Order"컬럼 (숫자 2,0)을 포함하고 있습니다. ID별로 그룹화 된 '주문'열에서 가장 낮은 숫자로 모든 것을 선택하려고합니다.
query.GroupBy(item => item.Id).Select(item => item.Min(t => t.Order));
을하지만
내가 전체 엔티티가 필요합니다 (수 1 데는 보통 전체 목록을) 그냥 정수와 나에게는 IEnumerable을 제공합니다, 그래서 나는 이것을 시도 :
이 작동
query.GroupBy(item => item.Id).Select(item => item.OrderBy(t => t.Order).FirstOrDefault());
이 나에게 다음과 같은 예외 제공 :
이"오라클 11.2.0.3.0이 N을 수행을 ot 지원 APPLY "
따라서 명백한 해결책은 위에 나열된 일부 내용을 업데이트하는 것입니다. 그러나 :이 아닌 입니다.
고유 키 (ID, 주문 및 StartDate 열, 예 ... 묻지 않음)를 선택할 수 있다고 생각했습니다. 그러나 나는 그것을 어떻게합니까?
이것은 분명히 잘못된 것입니다 :
query.GroupBy(item => item.Id).Select(item => new { item.Min(t => t.Order), item.Min(t => t.Id), item.Min(t => t.StartDate) });
내가 가장 낮은 주문 번호와 행에 속하는 값을 원하면서, 그들 모두의 최소 값을 선택하기 때문
. 그래서 이것이 첫 번째 질문이 될 것입니다. 어떻게 선택합니까?두 번째 질문 : 고유 키와 함께 사용되는 엔티티 전체를 얻으려면 어떻게해야합니까? 하나의 선택에서 쿼리를 수행 할 수 있습니까? list.contains를 사용해야합니까?
제안 사항?
나는이를 올바른 대답으로 받아 들였습니다. 이 대답에는 두 가지 추가 사항이 필요합니다. SelectMany를 사용하여 첫 번째 쿼리를 병합합니다 (이 예제보다 복잡합니다). 결과에서 고유 식별자 만 가져 와서 최종 데이터를 필터링합니다. 그 후 그것은 쉬웠다. –