2009-05-03 4 views
2

this one과 관련된 질문이 있습니다. 계산 (집계)을 수행하고 싶지 않지만 연관성에서 표시 값을 가져와야합니다. 내 C# 코드에서는 Linq가 모든 필요한 배선을 생성하도록 외래 키 제약 조건을 설정했기 때문에이 값을 직접 참조 할 수 있습니다. Gridview 데이터 소스 속성으로 IQueryable을 지정하고 결과 집합에서 기본 엔터티의 열이 아닌 것을 참조하면 해당 열이 존재하지 않는다는 오류가 발생합니다. Linq의 초보자로서 할당을 암시하는 것으로 IQueryable을 목록으로 변환하고 연결이 손실됩니다. 제 질문은이 작업을 수행하는 좋은 방법입니다.Linq to SQL 및 Gridview 데이터 소스

나는 gridview에 필요한 모든 열을 포함하는 익명 형식을 반환하는 병렬 쿼리를 작성하여이 문제를 해결할 수 있다고 가정합니다. 그렇게함으로써 내가 이미 가지고있는 데이터를 중복 메모리에 보유하게 될 것 같습니다. 데이터 소스를 할당 할 때 즉석에서 메모리 내 데이터 구조를 쿼리 할 수 ​​있습니까? 아니면 좀 더 직접적인 해결책이 있습니까?

gridview는 의사의 의료 그룹 연결을 표시해야하며 연결 ​​이름은 찾아보기 테이블에 있습니다.

alt text http://heeroz.com/phys.jpg

  IQueryable<Physician> ph = 
         from phys in db.Physicians 
         //from name in phys.PhysicianNames.DefaultIfEmpty() 
         //from lic in phys.PhysicianLicenseNums.DefaultIfEmpty() 
         //from addr in phys.PhysicianAddresses.DefaultIfEmpty() 
         //from npi in phys.PhysicianNPIs.DefaultIfEmpty() 
         //from assoc in phys.PhysicianMedGroups.DefaultIfEmpty() 
         where phys.BQID == bqid 
         select phys; 

그래서, 데니스 '답변에 따라, 난 내 쿼리에서 모든 불필요한 물건을 제거했습니다. 나는 처음부터 올바른 질문을하지 않을 것이라고 생각했다.

어쨌든 페이지에는 의사의 데이터가 표시됩니다. 모든 의료 그룹 소속을 그리드에 표시하고자합니다 (사용자가 소속 그룹을 삽입, 편집 및 업데이트하도록합니다). 이제는 다른 테이블에 명시 적으로 참여할 필요가 없다는 것을 알았습니다. Linq이 저를 위해이 작업을 수행합니다. 자식 연결 체인을 통해 참조하여 별도의 테이블에있는 라이센스 번호에 액세스 할 수 있습니다. med_group_print_name에 액세스 할 수없는 때문에의 GridView를 들어,

AffiliationGrid.DataSource = ph.First().PhysicianMedGroups; 

이 작동하지 않습니다 : 는 내 질문에 날 다시 가져다있는 gridview에서 의료 그룹 이름을 참조 할 수 없습니다

A field or property with the name 'med_group_print_name' was not found on the 
selected data source. 

을 다시, 만약 내가 Linq을 이해하지 못한다는 것이 너무 명백하다면 ... 나와 곰을.

답변

1

검색어가 이상하게 보입니다. 단순히

ph = from phys in db.Physicians 
    where phys.BQID == bqid 
    select phys; 

을 그리드에 표시해야합니다. 그게 효과가있다. 또한 Load()를 호출하는 이유는 무엇입니까? 그리드가 바인딩 될 때 DataContext가 삭제되지 않으면 필요하지 않습니다.

당신은 여전히 ​​문제가 당신이 도움이 될 것이다 당신이 얻을 오류 메시지를 게시하시기 바랍니다 수 있다면 ...

2 부

문제는 당신이 이름이 PhysMedGroup에서 효과적으로되지 가지고있다 . 해당 클래스의 속성이므로 이름에 액세스하려면 한 수준 아래로 MedGroupLookup을 탐색해야합니다.

사용중인 기술 (WinForms 또는 Web Forms 중 하나임)에 따라 MedGroupLookup.med_group_print_name에 액세스하도록 데이터 바인딩을 구성해야합니다.

+0

예로드가 필요하지 않을 수도 있다고 생각했습니다. 나는 나의 질문을 개정했다. – cdonner

+0

또는 오히려 곧 그렇게 할 것입니다. – cdonner

+0

다음과 같이 나타납니다. 'MedGroupLookup.med_group_print_name'이라는 이름의 필드 또는 속성을 선택한 데이터 소스에서 찾을 수 없습니다. – cdonner