Linq to sql Linq到sql。多对多表联接
我一直在构建一个电影应用程序来管理演员或人才。我有一个天赋表和一个语言表。我还有一个TALENTLANGUAGES表,显示了两者之间的多对多关系 下面是我可以编写的SQL,以显示给定人才所说的不同语言Linq to sql Linq到sql。多对多表联接,linq-to-sql,many-to-many,Linq To Sql,Many To Many,我一直在构建一个电影应用程序来管理演员或人才。我有一个天赋表和一个语言表。我还有一个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
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类。如何使用LINQtoSQL执行上述代码。谢谢。以下是一种方法: 首先创建一个results对象,它将保存一个对象中所需的信息。让我们称之为天才语言容器
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脚本执行得更快。
< P> Remus,我想我自己会回答这个问题,因为它是一个如此干净的解决方案。看看这个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...
}
这太酷了!林克帮我加入了 雷姆斯,谢谢你的回复。看起来不错,我觉得你的Where子句有个漏洞。有没有一种方法可以在不创建容器的情况下执行此操作。我对linq真的是个新手。我还没有测试过这段代码——可能有bug,不过这种方法是你应该从中吸取的。至于在不创建容器的情况下执行此操作,您在考虑返回什么?oops-将“where”语句更新为使用==,而不是=,这可能会修复您所说的错误。不,我不认为您可以这样做where。无论如何,我没有得到任何IntelliSense.“var”类型基本上创建了一个软类型的临时容器。很高兴这对你有用。是的,这就是我需要的,一个临时容器。这两种解决方案都应该有效。谢谢