2014-02-18 3 views
1

Я новичок в linq для объектов. Я пытаюсь сделать не в заявлении, и когда я запустил его, я возвращаюсь назад. Но если я запустил SQL-эквивалент, я верну данные.linq для сущностей Не в постановке

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 также пытается получить список «code». Мне не хватает времени? – Sachin

+0

Вам не хватает того, что OP пытается реплицировать SQL-запрос с 'SELECT * FROM' –

Смежные вопросы