2009-04-04 5 views
0

회사 등록자 데이터베이스 (검색/디렉토리 기능 용)가 있습니다. 우리는이 기능에 대해 지불하는 등록자 (예 : 광고/추가 이미지/로고 등)에 "향상된"정보를 보관할 수있는 새로운 테이블을 추가했습니다. 현재 새 테이블에는 등록자 고유 식별자와 몇 가지 추가 필드 (이미지 등의 경로)가 있습니다. 사용자는 특정 기준으로 사용자를 검색 할 수 있으며 향상된 목록은 목록 상단에 나타납니다. 검색 결과에 등록자가 두 번 표시되지 않아야합니다 (사용자가 향상된 목록을 가지고있는 경우 상위 "확장 목록"영역에만 표시되어야 함). 이것을 어떻게 할 수 있습니까?LINQ를 사용하여 SQL 결과 결합

답변

1

이전 테이블에서 새 테이블로의 왼쪽 외부 조인. 경우 ""에 의해 순서 "당신의 쿼리에

앞에 추가를 new_table.id 당신이이 있다면 다음 다른 1 0 끝"그래서

가 null :

select foo, bar from old_table 
order by bar, foo; 

당신이이있을 것이다 :

select a.foo, a.bar from old_table a 
left join new table b on (a.customer_id = b.customer_id) 
order by 
case when new_table.customer_id is null then 1 else 0 end, 
bar, foo; 

편집 : 코드의 외부 조인에서 "왼쪽"을 버렸습니다.

+0

예, 방금 왼쪽 외부 조인을 사용했습니다 (이 작업을 수행했지만 작은 코드 스 니펫에 없었습니다). 그리고 완벽하게 작동했습니다. 감사합니다! –

1

LINQtoSQL과 디자이너 생성 엔터티를 사용하는 경우 적절한 외부 키 관계를 설정했다고 가정 할 때 등록자 엔터티에 대한 관련 정보 집합이 있어야합니다. 나중에 이것을 추가했다면 이것을 수동으로 추가하거나 (여기 참조) 엔티티를 삭제/다시 추가하여 디자이너가 새로운 관계를 선택해야 할 수도 있습니다. 그런 다음 쿼리는 것 같은 뭔가 :

var registrants = db.Registrants.Where(... selection criteria here ...); 

registrants = registrants.OrderByDescending(r => r.EnhancedData.Count()) 
         .ThenBy(r => r.Name); // or normal sort order 

은 아마도 0 또는 1 그래서 이것은 당신의 결과의 상단에 강화 된 데이터로 사람을 두어야 할 것이다 계산합니다.

관련 문제