linq to entities不在声明中

时间:2014-02-18 15:43:54

标签: linq entity-framework

我是linq to entity的新手。我正在尝试做一个不在声明中,当我运行它时,我会回来。但是,如果我运行SQL等价物,我会收回数据。

我想复制的SQL语句是

SELECT * FROM [SCRAPREASON] WHERE [CODE] NOT IN (SELECT [CODE] FROM [QUALITYALERTRULE]) ORDER BY [CODE]

我现在的Linq是

  var DefectCode = PumaOEEEntities.ScrapReasons
     .Where(x => !PumaOEEEntities.QualityAlertRules.Any(y => y.Code != x.Code))
     .Select(x => new { GroupID = x.Code}).ToList();

谁能看到我做错了什么?

2 个答案:

答案 0 :(得分:1)

您应该比较相等的代码(==而不是!=):

 var reasons = PumaOEEEntities.ScrapReasons
     .Where(x => !PumaOEEEntities.QualityAlertRules.Any(y => y.Code == x.Code))
     .OrderBy(x => x.Code)
     .ToList();

生成的SQL将如下所示:

SELECT
    [Extent1].[Code] AS [Code],
    // Other columns
    FROM [dbo].[ScrapReasons] AS [Extent1]
    WHERE  NOT EXISTS (SELECT
        1 AS [C1]
        FROM [dbo].[QualityAlertRules] AS [Extent2]
        WHERE [Extent2].[Code] = [Extent1].[Code]
    )
    ORDER BY [Extent1].[Code] ASC

答案 1 :(得分:0)

您可以尝试这样的Except

var DefectCode = PumaOEEEntities.ScrapReasons.Select(x=>x.Code)
                .Except(PumaOEEEntities.QualityAlertRules.Select(y=>y.Code)).ToList();