2010-12-09 4 views
0

저는 배우 나 "인재"를 관리하기 위해 모션 픽처 응용 프로그램을 만들었습니다. 저는 TALENT 테이블과 LANGUAGES 테이블을 가지고 있습니다. 또한 둘 사이의 많은 관계를 보여주는 TALENTLANGUAGES 테이블이 있습니다.Linq to sql. 다 대다 테이블 조인

다음은 주어진 재능이 말하는 다른 언어를 보여주기 위해 작성할 수있는 SQL입니다.

Select t.TalentID, t.FirstName, tl.LanguageID, l.Name from Talent t 
inner join TalentLanguage tl on tl.TalentID = t.TalentID 
inner join Language l on l.LanguageID = tl.LanguageID 
where t.TalentID = 10000; 

내 C# 응용 프로그램에서 저는 Linq를 SQL 클래스에 사용하고 있습니다. 어떻게 위의 코드를 linq with sql로 할 수 있을까요? 감사. 는 "결과"개체, 당신은 하나의 객체에 필요한 정보를 개최한다 무언가를 만들어

시작 :

답변

0

레무스, 그런 깨끗한 해결책이기 때문에 나는 스스로에게 대답 할 것이라고 생각합니다. 확인해보세요 ...

var languages = from tl in talentDB.TalentLanguages 
       where tl.TalentID == id 
       select new { lang = tl.Language.Name, tal_id = tl.TalentID }; // could get more values if needed.. 

foreach (var l in languages) 
{ 
    string language = l.lang; 
    string talentID = l.tal_id; 
    // etc... 
} 

이것은 매우 멋집니다! Linq가 나를 위해 가입했습니다 !!

+0

'var'유형은 기본적으로 소프트 형식의 임시 컨테이너를 만듭니다. 다행이 당신을 위해 일했습니다. – Remus

+0

그래, 이건 내 사건, 임시 컨테이너에 필요한거야. 두 가지 솔루션 모두 작동해야합니다. 감사. – RayLoveless

0

여기 당신이 그것을 할 수있는 하나의 방법입니다. 의 적절하게 당신의 필요를지도하는 Select 문 작성,

public class TalentLanguagesContainer 
{ 
    public int TalentID { get; set; } 
    public string FirstName { get; set; } 
    public int LanguageID { get; set; } 
    public string LanguageName { get; set; } 
} 

그런 다음 "TalentLanguagesContainer"를 부르 자 : 또한

public IQueryable <TalentLanguagesContainer> GetTalentLanguages() 
{   
     MyDataContext _dataContext = new MyDataContext(); 

     return _dataContext.TalentLanguages 
        .Where(t => t.TalentID == 10000) 
        .Select(tl => new TalentLanguagesContainer() { 
          TalentID = tl.TalentID, 
          FirstName = tl.Talent.FirstName, 
          LanguageID = tl.LanguageID, 
          LanguageName = tl.Language.Name }); 
} 

을, 당신은 이와 같은 더 복잡한 스크립트 저장 프로 시저를 작성하는 것이 좋습니다 하나 - 당신은 너무 빨리 수행하는 SQL 스크립트를 찾을 수 있습니다.

+0

Remus, 답변 해 주셔서 감사합니다. 좋은데, Where 절에 버그가 있다고 생각합니다. 컨테이너를 만들지 않고도이 작업을 수행 할 수있는 방법이 있습니까? 나는 정말로 linq에 새로운 사람이다. – RayLoveless

+0

이 코드를 테스트하지 않았습니다 - 버그가있을 수 있습니다. 컨테이너를 만들지 않고 그것을하는 것에 관해서, 당신은 무엇을 돌려 주겠다고 생각하고 있습니까? – Remus

+0

oops - "where"구문을 "="대신 "=="를 사용하도록 업데이트했습니다. 이는 "당신이 말한 버그를 고칠 것입니다. – Remus