2012-04-19 6 views
0

У меня есть следующие таблицы:LINQ версия запроса SQL

Monster: 
Name  Description    EatsPeople 
Vampire Pale, afraid of light True 
Ghost See-through, annoying False 
Wraith Green-ish, ugly, dumb True 

TagLookup: 
Name ID 
Ghost 1 
Ghost 2 
Wraith 1 

Tags: 
ID Text      Value 
1  Green      green-skin 
2  Screams like a banshee banshee-call 

для запроса монстра, который имеет тег зеленый кожи я использую этот SQL-запрос:

SELECT m.Name, m.Description, m.EatsPeople 
    FROM dbo.Monster AS m 
    INNER JOIN dbo.TagLookup AS tl 
    ON m.Name = tl.Name 
    INNER JOIN dbo.Tags AS t 
    ON t.ID = tl.ID 
    AND t.Value = 'green-skin'; 

Это прекрасно работает и денди, как и следовало ожидать, но у меня возникают проблемы с версией LINQ этого запроса. Я попытался LINQPad без везения + поиск Bing + Stackoverflow с не много удачи

ответ

0

попробовать это:

var a = from m in Monsters 
      join tl in TagLookup 
       on m.Name equals tl.Name 
      join t in Tags 
       on t.ID = tl.ID 
      where t.Value = 'green-skin'; 
      select new 
      { 
       m.Name, 
       m.Description, 
       m.EatsPeople 
      }; 
1

Это приведет к тем же join:

var result=(
    from m in db.Moster 
    join tl in db.TagLookup 
     on tl.Name equals tl.Name 
    from t in db.Tags.Where(x=>x.ID==tl.ID && x.Value = "green-skin") 
    select new 
    { 
     m.Name, 
     m.Description, 
     m.EatsPeople 
    }); 

Или вы можете сделать это так, как хорошо. Это приведет к тому же результату:

var result=(
    from m in db.Moster 
    join tl in db.TagLookup 
     on tl.Name equals tl.Name 
    join t in db.Tags 
     on tl.ID equals t.ID 
    where 
     t.Value = "green-skin" 
    select new 
    { 
     m.Name, 
     m.Description, 
     m.EatsPeople 
    }); 
Смежные вопросы