LINQ系列:LINQ to SQL Exists/In/Any/All/Contains
1. Any
返回没有Product的Category
var expr = from c in context.Categories where !c.Products.Any() select c;
SELECT [Extent1].[CategoryID] AS [CategoryID], [Extent1].[CategoryName] AS [CategoryName] FROM [dbo].[Category] AS [Extent1] WHERE NOT EXISTS (SELECT 1 AS [C1] FROM [dbo].[Product] AS [Extent2] WHERE [Extent1].[CategoryID] = [Extent2].[CategoryID] )
var expr = from c in context.Categories where !c.Products.Any(p => p.UnitPrice > 10m) select c;
SELECT [Extent1].[CategoryID] AS [CategoryID], [Extent1].[CategoryName] AS [CategoryName] FROM [dbo].[Category] AS [Extent1] WHERE NOT EXISTS (SELECT 1 AS [C1] FROM [dbo].[Product] AS [Extent2] WHERE ([Extent1].[CategoryID] = [Extent2].[CategoryID]) AND ([Extent2].[UnitPrice] > cast(10 as decimal(18))) )
2. All
var expr = from c in context.Categories where c.Products.All(p => p.Discontinued) select c;
SELECT [Extent1].[CategoryID] AS [CategoryID], [Extent1].[CategoryName] AS [CategoryName] FROM [dbo].[Category] AS [Extent1] WHERE NOT EXISTS (SELECT 1 AS [C1] FROM [dbo].[Product] AS [Extent2] WHERE ([Extent1].[CategoryID] = [Extent2].[CategoryID]) AND ([Extent2].[Discontinued] <> cast(1 as bit)) )
3. Contains
var expr = from p in context.Products where new string[] { "LINQ to Object", "LINQ to ADO.NET", "LINQ to XML" } .Contains(p.ProductName) select p;
SELECT [Extent1].[ProductID] AS [ProductID], [Extent1].[CategoryID] AS [CategoryID], [Extent1].[ProductName] AS [ProductName], [Extent1].[UnitPrice] AS [UnitPrice], [Extent1].[UnitsInStock] AS [UnitsInStock], [Extent1].[Discontinued] AS [Discontinued] FROM [dbo].[Product] AS [Extent1] WHERE [Extent1].[ProductName] IN (N'LINQ to Object', N'LINQ to ADO.NET', N'LINQ to XML')
var expr = from p in context.Products where !(new string[] { "LINQ to Object", "LINQ to ADO.NET", "LINQ to XML" }) .Contains(p.ProductName) select p;
SELECT [Extent1].[ProductID] AS [ProductID], [Extent1].[CategoryID] AS [CategoryID], [Extent1].[ProductName] AS [ProductName], [Extent1].[UnitPrice] AS [UnitPrice], [Extent1].[UnitsInStock] AS [UnitsInStock], [Extent1].[Discontinued] AS [Discontinued] FROM [dbo].[Product] AS [Extent1] WHERE NOT ([Extent1].[ProductName] IN (N'LINQ to Object', N'LINQ to ADO.NET', N'LINQ to XML'))