2010-12-01 6 views
3

조건이 참인 조인 된 결과 집합의 항목에 대해 개수를 계산해야합니다. 그래서 나는 "어디에서 어디에서"표현의 유형을 조인한다. 이 표현식은 select 또는 groupby로 끝나야합니다. 사실 열 데이터가 필요하고 그것을 선택하지 따라서 빠르게 파악하지 않습니다Linq-SQL-SQL Count

count = (from e in dc.entries select new {}).Count(); 

을 나는이 개 질문이 :

  1. 을 dB의 관점에서이 작업을 수행하는 빠른 방법이 있나요 하중?
  2. 전 전체 쿼리 복사본을 복제해야합니다. 거기에 쿼리를 구조화 할 수있는 방법이 있습니까? 두 곳 모두에 대해 한 곳을 가질 수 있고 모든 필드를 가진 목록을 말하게 할 수 있습니까?

감사합니다.

특별한주의하십시오 :

  1. 쿼리 조인과 간단한 테이블 따라서 나는 선택 문을 사용해야합니다 없습니다.
  2. 두 개의 다른 쿼리 본문이 필요합니다. 왜냐하면 실제로 필드를 모두로드 할 필요가 없기 때문입니다.

select 쿼리를 사용할 때 query.Count와 Table.Count를 사용할 때 데이터가 가득 찬 것으로 가정합니다. 이 일을 할 수있는 더 나은 방법을 찾고자하는 사람들과 실제로 일어나는 일에 대한 상세한 지식을 기대하십시오. 이보다 더 자세히 조사하기 위해 로깅을 해제해야합니다.

+0

'count = dc.entries.Count();'로 코드를 단순화 할 수 있습니다. –

+0

@Albin 위를 참조하십시오. 이 테이블은 테이블이 아니라 조인을 포함하는 쿼리입니다. –

답변

1
//you can put a where condition here  
var queryEntries = from e in dc.entries select e; 
//Get count 
queryEntries.Count(); 
//Loop through Entries, so you basically returned all entries 
foreach(entry en in queryEntries) 
{} 
+0

제안 해 주셔서 감사합니다. 그러나 질문은 쿼리를 최적화 할 수있는 방법입니다. 이것은 제가 위에있는 것보다 덜 효율적입니다. SQL과 스칼라를 수행하는 것이 훨씬 덜 효율적인 모든 데이터와 모든 필드를로드하고 있습니다. –

+0

코드를 다시보고 내 코드를 복제하지 않기 위해 Count() 메서드를 사용할 수 있지만 모든 항목에 여전히로드됩니다 (믿을 수 있음). 이것은 내가 실제로 설명이 필요한 것입니다. –

6

Queryable.Count

소스 파라미터의 유형의 구현에 의존 수 (된 IQueryable)를 호출 나타내는 식 트리 을 실행하는 결과로 발생 쿼리 동작 . 예상되는 동작은 소스에있는 항목 수를 으로 계산합니다.

실제로 LinqToSql 또는 LinqToEntities를 사용하면 Queryable.Count()이 데이터베이스로 전송됩니다. 열이 메모리에로드되지 않습니다. 생성 된 sql을 확인하여 확인하십시오. 내가 Table.Count

대 query.Count을 사용 이것은 사실이 아니다 때 나는 그것이 데이터를 채우고있는 선택 쿼리를 사용할 때


나는 가정합니다. 생성 된 sql을 확인하여 확인하십시오.


나는 쿼리의 내 전체 사본을 복제해야합니다. 거기에 내 쿼리를 구조화 할 수있는 방법이 있습니다. 두 곳 모두 한 곳에서 모든 분야의 목록을 말하도록 할 수 있습니까?

카운트와 목록이 모두 필요한 경우 목록을 가져 와서 계산하십시오.

카운트가 가끔 필요하고 다른 경우에는 목록이 필요합니다 ... 복잡한 IQueryable을 반환하는 메소드를 작성하고 .Count()를 호출하고 다른 호출은 .ToList()를 호출합니다.


실제로 열 데이터가 필요하고, 따라서 빠른 선택하지 않는 것입니다 파악하지 않습니다.

이것은 시나리오에서 기본적으로 거짓입니다. 인덱스가 결과 컬럼을 포함하지만 결과 컬럼이없는 시나리오에서는 사실 일 수 있습니다.

시나리오에서는 쿼리 최적화 프로그램에서 선택한 인덱스를 사용하여 해당 인덱스를 사용하여 개수를 계산할 수 있습니다.

요약 : 쿼리 최적화 프로그램이 원하는 최적화를 수행합니다.

+0

답장을 보내 주셔서 감사합니다. 디버거에서 볼 때 모든 항목이 표시됩니다. 디버거보기가 원인 이었습니까? 한 가지 더, 내 목록 loadswith가 필요하고 내 개수가 이렇게 쿼리 최적화 프로그램이 2 루틴에 대한 필요성을 나타내는이 처리 할 수없는 것 같아요. –

+0

시간이되면 확인해 보겠습니다. 그러나 이것을 자세히 조사 할 시간이 없었습니다. –

+0

디버거에서 무엇을 가리키고 있습니까? 게시 된 코드에없는 내용입니까? 데이터베이스에 발급 된 실제 SQL을 보려면이 옵션을 사용할 수 있습니다. DataContext.Log = Console.Out; –