对lambda表达式或linq的SQL查询

对lambda表达式或linq的SQL查询,sql,Sql,如何将以下查询转换为lambda表达式 select * from Invoice_main where id not in (select invoice_main_id from Invoice_payment_by_pay_method) 我找不到“不在”的替代方案 假设您正在使用LINQ to SQL: from inv in Invoice_main where !(from m in Invoice_payment_by_pay_method select m.inv

如何将以下查询转换为lambda表达式

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

我找不到“不在”的替代方案

假设您正在使用LINQ to 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
这个!(…).Contains(…)由LINQ自动转换为SQL,转换为
notexists
子句(注意:这比
notin
子句更有效)


其他提供程序(即非LINQ到SQL)可能不支持将
的内容重写为
存在的内容,因此这可能不适用于所有内容。

您好,我使用的是entitydatamodel。我对entitydatamodel和LINQtoSQL都不太了解。但我认为LINQtoSQL不能在entitydatamodel上工作。当我使用建议的查询时,它给出了一个错误。它类似于“找不到查询模式的实现…”,所以您使用的是实体框架。LINQ对实体的限制要比LINQ对SQL的限制大得多(我个人的观点)。您没有与LINQ等效的实体。您必须有两个LINQ-to-Entities查询,一个用于从pay_方法中选择ID,另一个使用
Any
子句从第一个查询中排除ID。EF4的LINQ-to-Entities将支持IN子句的有限情况: