2009-09-16 1 views
1

간단한 문제를 처리하는 가장 좋은 방법을 찾으려고합니다. 두 테이블에 대한 간단한 LINQ 조인이 있습니다. 생성 된 dbml 클래스와 동일하기 때문에 한 테이블의 형식을 반환하는 방법을 알고 있습니다. 그러나 두 테이블의 데이터를 모두 반환하려는 경우 둘 다 반환하고 관계를 사용하는 방법이 없습니까? 두 테이블의 데이터를 반환하기 위해 다른 반환 유형을 실제로 만들어야합니까? FYI- 다른 테이블 객체와 함께 출력 매개 변수를 반환하고 싶지 않습니다. 나는 또한 익명의 타입을 반환하는데 정말로 관심이 없다. 가장 좋은 방법은 무엇입니까? 어떤 도움Linq to SQL : dbml에 의해 다중 테이블 조인 리턴 유형이 생성되지 않았습니다.

public IQueryable<Consumer_Question> GetQuestions(int subCategoryId) 
    { 
     //create DataContext 
     MototoolsDataContext mototoolsDataContext = new MototoolsDataContext(); 
     mototoolsDataContext.Log = Console.Out; 

     var subcategoriestag = (from subCatTag in mototoolsDataContext.Consumer_SubCategoriesTags 
           join tagQuestion in mototoolsDataContext.Consumer_TagQuestions on subCatTag.TagID equals tagQuestion.TagID 
           join question in mototoolsDataContext.Consumer_Questions on tagQuestion.QuestionsID equals question.ID 
           where subCatTag.SubCategoriesID == subCategoryId 
           orderby subCatTag.ID descending 
           select question); 
           //select new { question, tagQuestion }); 

     return subcategoriestag; 
    } 

감사합니다,

답변

1

당신이 다음 위의 쿼리는 단순히 '트리를 걸어'는 전혀 조인 구문을 필요로하지 않는 LINQ - 투 - SQL 디자이너의 관계를 정의한 경우 필요에 따라, 예를 들면 : 문은 이전에서 개체를 사용하는 '에서'2 층과 3은 LINQ - 투 - SQL이 이미 관계에 대해 알고 있어야하기 때문에 것을

var subCategoriesTag = (
    from subCatTag in motoToolsDataContext 
    from tagQuestion in subCatTag.TagQuestions 
    from question in tagQuestion 
    where subCatTag.SubCategoriesID == subcategoryId 
    orderby subCatTag.ID descending 
    select question 
); 

참고.

관계에 대해 더 많이 알지 못하면보다 정확한 답변을 제공하기가 어렵습니다. 관련 속성이 무엇인지에 대해 몇 가지 가정을해야했습니다.

+0

은 일부 나에 대한 연결 속성을 생성 모든 사람이 아니라 관계의. 이 관계가 제대로 만들어 졌다면 부모 유형을 돌려주고 아이들을 데려다 줄 수 있다고 말하는 겁니까? 그게 내가 원하는거야! dbml 연관 버그를 조사해야 할 것 같습니다. – mytwocents

+0

그래서 관계의 외래 키 부분을 잊었 기 때문에 관계에 대한 내 연결 특성을 생성하는 dbml 문제가 발생했지만 부모 테이블에 기본 키 지정이 누락되어있었습니다. 이제 질문 객체에서 children 객체를 탐색 할 수 있고 원하는 모든 데이터를 포함하는 사용자 정의 반환 유형에 대해 걱정할 필요가 없습니다. 시원한. – mytwocents

+0

@mytwocents : 다행스럽게도 일단 모든 것이 올바르게 설정되면 LINQ-to-SQL은 아주 훌륭합니다. 아직 약간의 고통이있는 부분이 있지만 결국 VS2010에 대한 몇 가지 개선 사항이 있습니다. –

0

나에게 맞는 소리는 DataLoadOptions.LoadWith <>입니다. 이렇게하면 Question 개체를 반환하고 관련 개체는 정의 된 연결을 통해 동시에 채워집니다. 이런 식으로 뭔가 : 나는이 (가) DBML 생성 된 클래스를 발견

이미 데이터베이스 내 테이블에 대한 관계 (기본 키, 외래 키)를 할당 한 경우, 다른 질문을 구걸
public IQueryable<Consumer_Question> GetQuestions(int subCategoryId) 
{ 
    //create DataContext 
    using (MototoolsDataContext mototoolsDataContext = new MototoolsDataContext()) 
    { 
     mototoolsDataContext.Log = Console.Out; 
     DataLoadOptions options = new DataLoadOptions(); 
     options.LoadWith<Consumer_Questions>(q => q.Consumer_TagQuestions); 
     options.LoadWith<Consumer_TagQuestions>(tag => tag.Consumer_SubCategoriesTags); 
     mototoolsDataContext.LoadOptions = options; 

     var questions = (from subCatTag in mototoolsDataContext.Consumer_SubCategoriesTags 
           join tagQuestion in mototoolsDataContext.Consumer_TagQuestions on subCatTag.TagID equals tagQuestion.TagID 
           join question in mototoolsDataContext.Consumer_Questions on tagQuestion.QuestionsID equals question.ID 
           where subCatTag.SubCategoriesID == subCategoryId 
           orderby subCatTag.ID descending 
           select question); 
           //select new { question, tagQuestion }); 

     return questions; 
    } 
} 
+0

예, 역시 작동 할 것이지만 일반적으로 지연되지 않은로드의 경우 "LoadWith"가 아닙니다. – mytwocents

+0

수정하십시오. 모든 값을 함께 검색합니다. –