2012-04-19 50 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沒有運氣+搜索+冰與#1沒有多少運氣

回答

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