2011-03-14 113 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。 –