2013-04-02 2 views
1

나는의 LINQ 선택은

public class SummaryModel 
{ 
    public int CompanyCount { get; set; } 
    public int GroupCount { get; set; } 
    public int ProjectCount { get; set; } 
    public int ResourcesCount { get; set; } 
    public int PeopleCount { get; set; } 
} 

내가 내 데이터베이스를 쿼리하고 여러 테이블에서 레코드 수를 반환하고이 모델 객체의 이식에 LINQ를 사용하고자하는 다음과 같은 모델을 가지고있다.

이 내가 그 일을하고 어떻게 :

 using (var ctx = new WeWorkModel.weWorkEntities()) 
     { 
      var summary = new SummaryModel() 
       { 
        CompanyCount = ctx.Companies.Count(), 
        PeopleCount = ctx.People.Count(), 
        GroupCount = ctx.Groups.Count(), 
        ProjectCount = ctx.Projects.Count(), 
        ResourcesCount = ctx.Resources.Count() 
       }; 

     } 

이이 작업을 수행하는 가장 효율적인 방법이 있나요?

+0

대체 방법이 거의 없습니다. 어쨌든 카운트가 가장 비싼 부분이 될 것입니다. –

답변

0

이 모델을 데이터베이스에 저장하거나 인스턴스화 한 후에 값을 변경해야합니까? 그렇지 않은 경우이 코드 블록을 매개 변수없는 생성자에 넣고 필드를 읽기 전용으로 표시하여 의도 한 것과 다른 방식으로이 모델을 사용하지 않도록하십시오. 나중에 필드 초기화에 대한 더 많은 제어가 필요한 경우 해당 특정 사례를 처리 할 다른 생성자를 추가하기 만하면됩니다. 주된 질문에, 나는 그것을 다루는 당신의 방법에 비효율적 인 아무것도 볼 수 없다. 코드에는 거의 모든 시나리오가 다루어지기 때문에 항상 더 간결한 방법이나보다 효율적인 방법이 있습니다.

1

네, 이것은 가장 효율적인 방법입니다. 이것은 sql 쿼리를 작성하는 것과 같습니다. 이것은 개체를 가져 오지 않고 서버에서 계산하기 때문입니다. 그래서 이런 식으로 (쿼리를 추적 한 프로파일 러를 사용하여)

SELECT 
[GroupBy1].[A1] AS [C1] 
FROM (SELECT 
    COUNT(1) AS [A1] 
    FROM [dbo].[Company] AS [Extent1] 
) AS [GroupBy1]