2016-07-22 5 views
0

I이 표 1과 같은 두 개의 테이블이 : 동물테이블 합을 얻기 면도기 도면에 나타내는 것은

Country Lion Tiger State 
india  4  5 Madhya Pradesh 
india  10  2 Utrakhand 
Russia 0  10 Primorsky krai 
Russia 1  20 Khabarovsk Krai 

표 2 :이

같은 inumerable 클래스를 작성한

Country No 
India 10 
Russia 5 

Project_Tiger

public animal animal {get;set;}; 
public project_tiger project_tiger {get;set;}; 

이제보기와 같은 결과를 표시하고 싶습니다.

Country NO lion tiger 
india 10 14  7 
Russia 5 1  30 

여기 사자와 호랑이 1 10 + 4 = 15, 지금 러시아

인도에 대한 + 2 = 7 (5), 그리고 같은 내가 지식 방법의 부족하고 테이블의 레코드 모두의 합계입니다 LINQ를 사용하여 데이터베이스에서 합 이러한 데이터를 쿼리하는 방법 면도칼보기에이 보여

나는 다음과 같은 SQL 쿼리를 작성할 수 있지만, 일에 대한

select animal.country, No, sum(lion), sum(tiger) from animal 
     inner join project_tiger ON animal.country equals project_tiger.country 

어떤 도움을 LINQ 그것을 변환 할 수 없습니다 감사합니다.

+1

의 일반적인 방법을 사용하여 필요

public class AnimalsCount { public int No { get; set; } public int Lion { get; set; } public int Tiger { get; set; } } 

을 맞는 클래스를 만듭니다. 당신은 linq보다 SQL을 사용하여 더 많은 능력을 갖습니다 – Steve

+0

혹시 데이터베이스 정규화에 대해 들었나요? –

+0

네,하지만 중복되지 않습니다, 마지막 열을 확인하십시오 –

답변

2

기본적으로 두 테이블을 모두 가입시키고 결과를 국가 이름별로 그룹화하고 그 결과를 생성해야합니다.

var groupd = (from a in dbContext.Animals 
       join b in dbContext.ProjectTigers on a.Country equals b.Country 
       select new { Country = a.Country, 
          No = b.No, 
          Lion = a.Lion, 
          Tiger = a.Tiger } 
      ) // We have the join results. Let's group by now 
      .GroupBy(f => f.Country, d => d, 
      (key, val) => new { Country = key, 
           No = val.First().No, 
           Lion = val.Sum(s => s.Lion), 
           Tiger = val.Sum(g => g.Tiger) }); 

이렇게하면 익명의 개체 모음을 얻을 수 있습니다. 기대하는 데이터 항목을 표현하기위한 뷰 모델/dto가 있다면이 linq 표현식의 투영 부분에서 사용할 수 있습니다.

또한 주석에 언급 된 다른 것과 마찬가지로 db 스키마를 빌드하는 더 좋은 방법을 살펴볼 수도 있습니다.

+0

당신은 그것이 나를 역동적으로 줄 것을 의미합니까 ?? 그리고 DB 스키마에 대한 제안 사항이 있으면 도움을 요청하십시오. –

0

여전히 EntityFramework를 사용하여 액세스 할 수 있으며 SQL 서버의 성능을 그대로 사용하여 들어 올릴 수 있습니다.

일반 메서드 SqlQuery<>을 사용하면이 작업을 매우 쉽게 처리 할 수 ​​있습니다.

는 SQL로 작업을 수행하는 방법을 알고 있다면 이제 나는 그렇게 만 말할 것 SqlQuery<AnimalsCount>

var animalsCount = ctx.Database 
        .SqlQuery<AnimalsCount>("SELECT Country,(SELECT [No] FROM ProjectTiger WHERE Country = a.Country) as [No], sum(lion) as Lion, sum(tiger) as Tiger FROM [Animal] as a GROUP BY Country") 
        .ToList();