2012-11-28 71 views
0

在SQL條件下,它會做這樣:的LINQ to SQL,在外國實體

SELECT * FROM Student 
WHERE SchoolId IN 
    (SELECT id FROM School WHERE Name LIKE '%elementary%') 

我如何使用LINQ實現這一點?我已經試過如下:

var list = context.Students.Where(x => context.Schools.Where(r => r.Name.Contains("elementary").Select(r => r.Id).Contains(x.SchoolId)) 

,但它不給我我想要的,可惜...

我知道這是可能首先從School表中檢索所有Id S,但我認爲它會對性能造成沉重的代價。最好我希望LINQ to SQL來處理所有事情;我不能用vanilla SQL來做這件事,因爲我需要動態的東西,而目前LINQ對我來說是最好的解決方案。

以上代碼僅供參考,我正在做的是有點不同(但差不多相同)。我真的需要一些幫助;如果您需要更多信息,請隨時提問。

編輯:我的不好,我錯過了一個領域。它的工作原理,但結果並沒有顯示出來,因爲我錯過了那場......那麼對不起...

+0

「這不是給我我想要的東西」 - 你是什麼意思?正確的結果還是正確的SQL? –

+0

恩,當我去調試並查看它在'IQueryable'中產生的查詢時,這是一個不行的事...與我在那裏寫的SQL完全不同。結果明智,我什麼也得不到。 – matt

回答

1

像這樣的東西應該工作。 Contains的第一個用法是在字符串對象上查看字符串是否包含「elementary」子字符串。 Contains的第二次使用位於列表中,並檢查第一個結果列表是否包含SchoolId。

var sublist = from s in context.Schools 
       where s.Name.Contains("elementary") 
       select id; 

var list = from s in context.Students 
      where sublist.Contains(s.SchoolId) 
      select s; 
2

試試這個:

var result = from st in context.Student 
      from sc in context.Schools 
      where sc.Name.Contains("elementary") && sc.SchoolId == st.SchoolId 
      select st; 

我有點朦朧的語法,原諒我。但是這應該指向正確的方向。