Linq to sql。多对多的表加入

时间:2010-12-09 16:53:32

标签: linq-to-sql many-to-many

我一直在制作动态影像应用程序来管理演员或“天赋”。我有一个TALENT表和一个LANGUAGES表。我还有一个TALENTLANGUAGES表,显示了两者之间的多对多关系。

这是我可以编写的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到sql做上面的代码。感谢。

2 个答案:

答案 0 :(得分:0)

这是你可以做到的一种方式:

首先创建一个“结果”对象,这个对象将保存您在一个对象中所需的信息。我们称之为“TalentLanguagesContainer”

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

然后,创建一个Select语句,以适当地映射您的需求:

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脚本也可以更快地执行。

答案 1 :(得分: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为我做了加入!!