Выражение NOT IN для LINQ to SQL

by DenizK 18. января 2009 19:31

Часто может возникать вопрос как написать для LINQ выражение, аналогичное SELECT NOT IN для SQL. Предположим мы хотим переписать код.

SELECT *
FROM [dbo].[Customers] AS [t0]
WHERE [t0].[CustomerID] NOT IN (
    SELECT [t1].[CustomerID]
    FROM [dbo].[Orders] AS [t1]
)

Самый быстрый с точки зрения производительности и понятные семантически является код

NorthwindDataContext dc = new NorthwindDataContext();

dc.Log = Console.Out;

var query =

    from c in dc.Customers

    where !(from o in dc.Orders

            select o.CustomerID)

           .Contains(c.CustomerID)

    select c;

foreach (var c in query) Console.WriteLine( c );

 

От транслируется в SQL-запрос:

SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName],

       [t0].[ContactTitle], [t0].[Address], [t0].[City],

       [t0].[Region], [t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]

FROM [dbo].[Customers] AS [t0]

WHERE NOT (EXISTS(

    SELECT NULL AS [EMPTY]

    FROM [dbo].[Orders] AS [t1]

    WHERE [t1].[CustomerID] = [t0].[CustomerID]

    ))

 

Текущий рейтинг: 4.0 (1 голосов)

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

LINQ | Tips & tricks

Комментарии

Комментарии закрыты

О нас

Это блог компании Инлайн. Мы занимаемся разработкой сайтов, корпоративных порталов и корпоративных информационных систем на основе новейших технологии Microsoft  - ASP.NET, SharePoint и Silverlight. А в этом блоге мы размещаем самые последние новости в области разработке для web.

Облако тегов