2014-02-18 37 views
1

我是新來的linq實體。我試圖做一個不在聲明中,當我運行它,我正在注意回來。但是,如果我運行相當於SQL的數據,我會返回數據。linq to entities不在聲明中

我試圖複製的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(); 

有人能看到我在做什麼錯?

回答

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

添加順序和看起來很完美。 – Maess

0

你可以嘗試Except這樣

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

這將只返回'代碼「列 –

+0

我認爲OP也試圖獲得'代碼'的列表。我錯過了什麼? – Sachin

+0

您錯過了OP正在嘗試複製具有'SELECT * FROM'的SQL查詢 –