2011-08-01 4 views
1

태그를 사용하여 스택 오버플로 방식과 비슷한 방식으로 콘텐츠를 분류하는 시스템이 있습니다. LINQ to SQL을 사용하여 가장 최근에 사용한 태그 목록을 생성하려고합니다.LINQ에서 고유 키를 사용하여 기본 키에서 SQL 사용

(from x in cm.ContentTags 
    join t in cm.Tags on x.TagID equals t.TagID 
    orderby x.ContentItem.Date descending select t) 
    .Distinct(p => p.TagID) // <-- Ideally I'd be able to do this 

태그 테이블에는 ContentItems 테이블과의 많은 관계가 있습니다. ContentTags는 이들을 조인하며, 각 튜플은 Tag 및 ContentItem에 대한 참조를가집니다.

Tablename.PrimaryKey 대신 Tablename. *을 비교하기 때문에 별개로 사용할 수 없으며 SQL로 변환되지 않기 때문에 IEqualityComparer를 구현할 수 없으며 잠재력을 끌어 내지 않기 때문에 .ToList()를 사용하여 DB의 수백만 레코드를 가져옵니다. 그래서 내가 무엇을해야하니?

답변

1

이러한 오버로드 된 고유 연산자를 지원하는 고유 한 쿼리 공급자를 작성할 수 있습니다. 값이 싸지는 않지만, 쿼리 생성을 구성 가능하게 만들 수 있다면 특히 유용 할 것입니다. 그러면 많은 사용자 정의가 가능합니다.

그렇지 않으면 저장된 proc 또는보기를 만들 수 있습니다.

0

사용 하위 선택 :

var result = from t in cm.Tags 
      where(
        from x in cm.ContentTags 
        where x.TagID == t.TagID 
       ).Contains(t.TagID) 
      select t; 

이것은 별개의 레코드가 반환되는 형태 cm.Tags을 의미합니다는, 유일한 문제는 당신이 result

를 주문하는 몇 가지 방법을 찾을 필요가있다
관련 문제