Запрос LINQ to SQL с использованием «NOT IN»

Может ли LINQ to SQL-запрос использовать NOT IN ?

например, SELECT au_lname, состояние FROM authors WHERE state NOT IN («CA», «IN», «MD»)

List<string> states = new List<string> { "CA", "IN", "MD" }; var q = from a in authors where !states.Contains(a.state) select new { a.au_lname, a.state }; 

или

  var q = authors.Where( a => !states.Contains( a.state ) ) .Select( a => new { a.au_lname, a.state } ); 

Вы можете сделать это с помощью Содержит:

  var states = new[] {"CA", "IN", "MD"}; var query = db.Authors.Where(x => !states.Contains(x.state)); 

вот пример:

 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 ); 

Да!

Вот пример из кода, который мы уже писали:

 List<long> badUserIDs = new List { 10039309, 38300590, 500170561 }; BTDataContext dc = new BTDataContext(); var items = from u in dc.Users where !badUserIDs.Contains(u.FbUserID) select u; 

Сгенерированный SQL получается:

{SELECT [t0].[UserID], [t0].[FbUserID], [t0].[FbNetworkID], [t0].[Name], FROM [dbo].[Users] AS [t0] WHERE NOT ([t0].[FbUserID] IN (@p0, @p1, @p2)) }