2011-03-14 146 views
5

我如何轉換下面的查詢lambda表達式SQL查詢lambda表達式或LINQ

select * 
from Invoice_main 
where id not in 
    (select invoice_main_id from Invoice_payment_by_pay_method) 

我無法找到「不」的選擇。

回答

2

假設你正在使用LINQ到SQL:!

from inv in Invoice_main 
where !(from m in Invoice_payment_by_pay_method select m.invoice_main_id).Contains(inv.id) 
select inv 

的(...)包含(...)自動通過LINQ到SQL轉換爲NOT EXISTS條款(注:這比NOT IN子句更有效率)。

其他提供程序(即不是LINQ到SQL)可能不支持將.Contains重寫爲EXISTS,因此這可能不適用於所有內容。

+0

嗨,我正在使用entitydatamodel。我不太瞭解entitydatamodel和linq到sql。但我認爲linq to sql不適用於entitydatamodel。當我使用建議的查詢時發出錯誤。它就像 - '找不到查詢模式的實現...' – Mukesh

+0

對不起以前的評論。它的工作。 – Mukesh

+0

所以你使用的是實體框架。 LINQ-to-Entities比LINQ-to-SQL(我自己的觀點)要嚴格得多。您沒有與LINQ-to-Entities等效的內容。你必須有兩個LINQ到實體的查詢,一個從pay_method中選擇ID,另一個使用'Any'從第一個查詢中排除ID。 –