1

我试图围绕 LINQ 查询返回与以下 SQL 查询等效的 lambda 表达式的正确语法来思考:

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 逻辑找出子查询时迷路了。

谢谢!

4

1 回答 1

3

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

var tools = session.CachedTools.Where(t => !t.Versions.Any(v => v.IsBetaVersion == 1));
于 2013-08-09T19:15:10.417 回答