带有子查询和NOT IN逻辑的LINQ或lambda表达式

时间:2013-08-09 19:10:56

标签: c# linq lambda

我正试图围绕LINQ查询的正确语法一个lambda表达式,它返回与以下SQL查询等价的内容:

SELECT * 
FROM tool t 
WHERE t.UniqTool 
  NOT IN (SELECT t1.uniqtool  
          FROM tool t1
          INNER JOIN [version] v ON v.UniqTool = t1.UniqTool 
            AND v.IsBetaVersion = 1)

基本上,我想获得尚未提供测试版的工具列表。我有一个工具对象,它同时包含UniqTool(ID值)和一个布尔属性,指示该版本是否为beta。

这是我最初的尝试:

var tools = from t in session.CachedTools where !t.IsBetaVersion select t;

我意识到它给了我错误的结果集,并且我试图找出带有NOT IN逻辑的子查询。

谢谢!

1 个答案:

答案 0 :(得分:3)

假设您的Tool实体上有导航属性,此查询应该会为您提供所有没有任何测试版本的工具:

var tools = session.CachedTools.Where(t => !t.Versions.Any(v => v.IsBetaVersion == 1));