2011-05-31 22 views
1

我需要使用LINQ來構建一種使用子查詢的奇怪查詢。更多LINQY-ness(子選擇)

我真的在尋找不同的記錄。通常情況下,SQL是這樣的:

select distinct col1, col2 from foo where col3 = somevalue 

然而,COL2恰好是一個BLOB,所以我不能用不同。所以,我認爲,未來最好的SQL是這樣的:

 

select f1.col1, f1.col2 
from foo f1 where f1.id in 
    (select distinct f2.id from foo f2 where f2.col3 = somevalue 
 

我不知道什麼是最好的辦法「短語」在LINQ是第二個查詢。這裏是我到目前爲止,它的作品,但我不知道它是否是最優的:

 

var query = from f in foo 
      where f.col3 == somevalue 
      select new {id = f.id}; 

var result = from f in foo 
      join q in query on f.id equals q.id 
      select new MyType() {col1 = f.col1, col2 = f.col2}; 

 

這給了我我想要的,但根據SQL管理器,生成的查詢約爲8%更昂貴而不是我手工製作的SQL子查詢。有沒有更好的方式來寫這個?

+0

這聽起來像你想做些什麼,但你不知道,你可以做,所以你問了些別的事情的問題 - 是你想要問你如何選擇col1和col2上,但只跑與col1不同?這是可能的。 – 2011-05-31 22:28:54

+0

@尼克:是的,這將解決問題。 – JMarsch 2011-05-31 22:44:46

回答

1

你可以試試嗎?

var result = from f in foo 
      where query.Contains(f.id) 
      select new MyType() {col1 = f.col1, col2 = f.col2}; 
+0

你是我發現的最有效的選擇。謝謝! – JMarsch 2011-05-31 23:19:37