2014-03-30 3 views
0

여러 역할을 가진 사용자가 액세스 할 수있는 페이지가 있습니다. 역할은 다음과 같습니다LINQ Group By IF 문

전) 마을 II) 지역 III) 국가 사용자가 다음 그는 예를 들어, 도시와 관련된 '타운'역할이있는 경우

로스 앤젤레스. 사용자에게 '교육구'역할이 있으면 교육구와 연결됩니다. 캘리포니아. 사용자가 '국가'역할을 갖는 경우 사용자는 국가와 연결됩니다. 미국.

이제 로스 앤젤레스는 마을이 아니라 도시이며 캘리포니아는 지역이 아니라 주입니다. 데이터의 구조를 이해하는 데 도움이되는 예제 만 제공했습니다.

각 역할은 여러 문서를 볼 수 있습니다. 문서는 섹션과 관련이 있습니다. 재정, 인프라 등

이제 데이터베이스에서 전체 데이터를 가져 오는 SP가 있습니다. 그런 다음 LINQ를 사용하여 데이터를 그룹화하려고합니다. 다음과 같이하고 싶습니다.

GROUP BY Role 
      --> GROUP BY Section 
           --> GROUP BY Document 
                --> IF ROLE is Town --> GROUP BY Town (e.g. Los Angeles) 
                --> IF ROLE is District --> GROUP BY District (e.g. California) 
                --> IF ROLE is Country --> GROUP BY Country (e.g. USA) 

LINQ를 사용하여 마지막 부분에 if 문을 사용할 수 있습니까? 그렇다면 구문에 대한 간단한 예를 들어 주시겠습니까? 쿼리 구문을 사용하여 작업하고 있습니다. 미리 감사드립니다.

당신이 역할의 이름은 각 클래스에 대한 일반적이며 그 상태, 도시의 이름을 포함하거나 속성입니다

public enum typeRoleEnum 
{ 
    country = 0, 
    state = 1, 
    town = 2 
} 

public class Role { 
    public string name { get; set; } 
    public typeRoleEnum type { get; set; } 
} 
public class Town: Role {} 
public class District : Role { } 
public class Country : Role { } 

역할에서 상속 클래스 (도시, 국가 및 주)와 함께 할 수

+0

세 가지 별도의 쿼리로 데이터를 가져올 수 없습니까? 그것은 훨씬 더 간단하게 만들 것입니다. –

+0

@JonSkeet도 동의합니다. 3 개의 쿼리를 작성한 다음 결과를 결합하십시오. – kevin

+0

JonSkeet과 kayson 둘 다 고맙습니다. 생각 해보니 그게 최선의 방법이라고 생각합니다. 호기심에서 LINQ의 if 문을 포함하는 마지막 부분을 수행 할 수 있습니까? – Matthew

답변

1

국가. 이 같은 속성에서만 그룹 단위로합니다.

당신이 만드는 당신은 느릅 나무 유형 목록 알려진합니다 다음은이

List<Role> list = new List<Role>(); 

Role rol1 = new Town() { name = "Town1", type = typeRoleEnum.town }; 
Role rol2 = new Town() { name = "Town2", type = typeRoleEnum.town }; 
Role rol3 = new Town() { name = "Town2", type = typeRoleEnum.town }; 

list.Add(rol1); 
list.Add(rol2); 
list.Add(rol3); 

처럼 개체의 목록을 만드는 것보다 쿼리는 하나가이 경우에

var t = from l in list 
    group l by l.name into grp 
select grp.Key; 

아마 될 것입니다 쿼리가 있지만 코드의 다른 위치에 if 문이있는 경우 목록을 만들어야 할 때

역할 유형이있는 클래스 만 사용할 수 있습니까? 세 가지 클래스가 서로 다른 동작을 가져야하며 공통 속성에 그룹화 기준 만 사용하려는 경우가 아니면 더 나은 해결책 일 수 있습니다.