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; 

Im in my C# application Я использую Linq для классов sql. Как я могу сделать вышеуказанный код с linq в 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... 
} 

Это довольно круто! Линк сделал это для меня!

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; } 
} 

Затем создайте Выберите утверждение, которое будет отображать ваши потребности соответствующим образом:

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 2010-12-09 17:35:18

+0

Я не тестировал этот код - могут быть ошибки, но подход - это то, что вы должны от него извлечь. Что касается этого, не создавая контейнер, что вы думаете о возврате? – Remus 2010-12-09 17:37:56

Смежные вопросы