2014-11-26 3 views
2

동일한 테이블의 집계 값을 포함하는 via를 통해 데이터베이스의 결과를 표시하려고합니다. 나는 각 라운드의 플레이어 이름과 점수를 저장하는 이름, 점수 및 라운드가있는 테이블을 가지고 있습니다. 그리드에 표시하고 싶습니다 (제가 5 라운드를 선택한다고 말하면서) 그러나 나는 또한 선택한 라운드를 포함하여 모든 라운드 동안 총점 인 각 플레이어의 순위를 보여주고 싶습니다.LINQ 집계 쿼리

지금까지 두 개의 쿼리가 있습니다. 하나는 이름 목록과 둥근 점수의 합계를 반환하고 다른 하나는 특정 라운드의 점수를 검색합니다. 순위를 얻으려면 합계의 인덱스 만 필요하지만 점수 자체의 합계는 필요하지 않습니다. 나는

Rank = r1.FindIndex(r => r.Name == tr.Name) 

같은과 두 번째 쿼리의 첫 번째 쿼리를 포함하기 위해 노력하고있어하지만 난 INT32 FindIndex ''방법을 인식하지 못하는 엔티티에 LINQ '오류 가 계속. 왜 내가 이것을 얻었는지 알지만 (SQL로 컴파일 될 수는 없다) 어떻게해야 할지를 알 수 없다. 그렇다면 테이블에서 필요한 행을 얻을 수 있도록 쿼리를 구성 할 수 있습니까? 또한 첫 번째 쿼리에서 플레이어의 인덱스 즉 올바른 순위의 요소를 얻으려면 어떻게해야합니까? 어떤 조언이 필요합니까?

답변

1

쿼리가 메모리 내에서 실행되도록하려면 IQueryable 폼 대신 IEnumerable 폼을 사용하십시오. Linq를 깨끗하게이 작업을 수행하는 방법은 AsEnumerable()에 대한 호출이 컴파일시의 형태가 IQueryable 경우에만 필요하다고 .AsEnumerable()

Rank = r1.AsEnumerable().FindIndex(r => r.Name == tr.Name); 

주입니다. 우리가 확장 방법에 대해 얘기하고 있기 때문에, 그들은이라고 제대로 런타임에 알려진 유형에 따라 할 것 - 모든 IEnumerable 방법은 메모리에 모두

+0

고마워요.하지만 이제는 IEnumerable에 FindIndex에 대한 정의가 포함되어 있지 않습니다. – Steve

+1

IEnumerable에는 FindIndex()에 대한 정의가 없기 때문입니다. 어쩌면이 도움이 될 수 있습니다 : [IEnumerable에서 요소의 인덱스를 얻는 방법] (http://stackoverflow.com/questions/1290603/how-to-get-the-index-of-an-element-in- 당신이 Aravol의 충고를 따르는 경우를 대비해서. – Flaudre

0

감사를 SQL 쿼리를 반복하는 foreachyield return 패턴을 사용 Aravol 및 Flaudre. 결국 간단히보기를 통해 필요한 정보를 보유하기 위해 db 끝의 데이터 구조를 변경했습니다. 이러한 LINQ 오류를 파악하는 것보다 구현하는 것이 더 간단했습니다.