2012-03-07 2 views
0

저는 Linq에서 초보자입니다. 내 내부 조인 쿼리가 코드에서 테이블을 교차하는 것보다 느리고 효율성이 떨어지는 것을 관찰했습니다. 또한 ListView에서 청구되는 이러한 데이터는 훨씬 가볍습니다.Linq에서 테이블 조인 효율

public static IEnumerable<Alumno> GetItems() 
{ 
     return (from gal in me.Table<GrupoAlumno>() 
       join alu in me.Table<Alumno>() 
       on gal.IdAlumno equals alu.ID 
       select alu); 
} 

어떻게 가능 : 여기

코드인가?

감사합니다.

+0

'me.Table ()'와'me.Table ()'의 유형은 무엇입니까? 그것은 정확히 무엇을 반환합니까? 더 빠른 코드를 보여줄 수 있습니까? – svick

+0

-1 이해할 수없는 질문. 내 첫 번째 질문 (더 많은 다음과 함께) : LinqToSql 또는 LinqToObjects를 사용하고 있습니까? –

+0

실례합니다. 나는이 둘의 차이를 모른다. 어쨌든 문제는 해결됩니다. 감사합니다. – daniherculano

답변

1

내 문제가 해결되었습니다. toList()을 변환해야했으며 이제는 ListView에 데이터를로드해도 문제가 없습니다.

public static IEnumerable<Alumno> GetItems() 
{ 

     return (from gal in me.Table<GrupoAlumno>() 
       join alu in me.Table<Alumno>() 
       on gal.IdAlumno equals alu.ID 
       select alu).ToList(); 
} 
0

Linq 연산자는 IEnumerable<T>에서 작동하므로 정렬되는 데이터에 대한 가정을 할 수 없으며 단순히 데이터를 반복하는 것보다 데이터에 액세스하는 더 좋은 방법을 사용할 수 없습니다.

데이터 양이 많아지면 기본 데이터 저장 방법 및 데이터에 대한 다른 알려진 사실을 활용하는 다른 구문을 사용하여보다 효율적인 코드를 작성할 수 있습니다.

성능에 문제가있는 경우 (실제로 문제가되는지 확인하기 위해 코드를 작성 했습니까?), linq은 갈 길이 멀지 않습니다. Linq는 성능을 구현하는 데 소요되는 시간보다 성능이 중요하지 않은 경우 검색 및 데이터 조작을 표현하는 것이 좋습니다. 다른 방법이 있다면 linq가 너무 느려질 수 있습니다.

1

나는 기존의 대답에 동의하지 않습니다!

Linq는 IEnumerable<T>에서만 작동하지 않으며 IQueryable<T>에서도 작동 할 수 있습니다. Linq 문은 종종 SQL과 같은 쿼리 언어로 실행됩니다. 이 경우 Linq는 SQL에서 직접 작동하는 것과 성능면에서 매우 유사하지만 컴파일 시간 유형 확인 및 인텔리 센스와 같은 다른 장점이 있습니다.

성능 문제에 직면 할 때마다 어떤 일이 일어나고 있는지 측정하는 것이 좋은 첫 걸음이라고 생각합니다.하지만 "linq은 아마도 갈 길이 멀지 않습니다."라고 나는 동의하지 않을 것입니다. 반대편 - "linq은 아마도 갈 길입니다"하지만 일어난 일을 측정하고 이해하는지 확인하십시오. SQL과 마찬가지로 linq 쿼리가 예상치 못한 일을하는 것이 너무 쉽습니다!

+0

나는 OP가 linq-to-objects에 관해 묻고 있다고 가정 했으므로 이것이 나의 대답의 맥락이다. 'IQueryable '을 사용하는 Linq-to-something은 성능에 관한 완전히 다른 이야기입니다. –

+1

Understood :'테이블 '이 포함되어 있기 때문에 약간 조심 스러웠다. OP가 SQLite를 사용해야한다고 생각하게 만들었지 만, 무언가는 우리가 결코 진실을 알 수 없다고 말한다. :) – Stuart