LINQ系列:LINQ to SQL Transact-SQL函数

来源:互联网 发布:自动点赞软件 编辑:程序博客网 时间:2024/04/28 17:36

1. CASE WHEN ... THEN ...

复制代码
var expr = from p in context.Products            select new             {                 商品ID = p.ProductID,                 商品名称 = p.ProductName,                 是否库存 = p.UnitsInStock > 0 ? "" : ""             };
复制代码
SELECT     [Extent1].[ProductID] AS [ProductID],     [Extent1].[ProductName] AS [ProductName],     CASE WHEN ([Extent1].[UnitsInStock] > 0) THEN N'' ELSE N'' END AS [C1]    FROM [dbo].[Product] AS [Extent1]

2. Distinct

var expr = context.Products    .Select(p => p.CategoryID)    .Distinct();
复制代码
SELECT     [Distinct1].[CategoryID] AS [CategoryID]    FROM ( SELECT DISTINCT         [Extent1].[CategoryID] AS [CategoryID]        FROM [dbo].[Product] AS [Extent1]    )  AS [Distinct1]
复制代码

3. Count

var expr = context.Products.Count();
复制代码
SELECT     [GroupBy1].[A1] AS [C1]    FROM ( SELECT         COUNT(1) AS [A1]        FROM [dbo].[Product] AS [Extent1]    )  AS [GroupBy1]
复制代码
var expr = context.Products    .Count(p => p.UnitPrice > 10m);
复制代码
SELECT     [GroupBy1].[A1] AS [C1]    FROM ( SELECT         COUNT(1) AS [A1]        FROM [dbo].[Product] AS [Extent1]        WHERE [Extent1].[UnitPrice] > cast(10 as decimal(18))    )  AS [GroupBy1]
复制代码

4. LongCount

var expr = context.Products.LongCount();
复制代码
SELECT     [GroupBy1].[A1] AS [C1]    FROM ( SELECT         COUNT_BIG(1) AS [A1]        FROM [dbo].[Product] AS [Extent1]    )  AS [GroupBy1]
复制代码
var expr = context.Products    .LongCount(p => p.UnitPrice > 10m);
复制代码
SELECT     [GroupBy1].[A1] AS [C1]    FROM ( SELECT         COUNT_BIG(1) AS [A1]        FROM [dbo].[Product] AS [Extent1]        WHERE [Extent1].[UnitPrice] > cast(10 as decimal(18))    )  AS [GroupBy1]
复制代码

5. Sum

var expr = context.Products    .Select(p=>p.UnitsInStock)    .Sum();
var expr = context.Products    .Sum(p => p.UnitsInStock);
复制代码
SELECT     [GroupBy1].[A1] AS [C1]    FROM ( SELECT         SUM([Extent1].[UnitsInStock]) AS [A1]        FROM [dbo].[Product] AS [Extent1]    )  AS [GroupBy1]
复制代码

6. Min

var expr = context.Products    .Min(p => p.UnitPrice);
var expr = context.Products    .Select(p => p.UnitPrice)    .Min();
复制代码
SELECT     [GroupBy1].[A1] AS [C1]    FROM ( SELECT         MIN([Extent1].[UnitPrice]) AS [A1]        FROM [dbo].[Product] AS [Extent1]    )  AS [GroupBy1]
复制代码

  查找每个类别中单价最低的商品:

复制代码
var expr = from p in context.Products            group p by p.CategoryID into g            select new            {                CategoryID = g.Key,                CheapestProducts = from p2 in g                                    where p2.UnitPrice == g.Min(p3 => p3.UnitPrice)                                    select p2            };
复制代码
复制代码
SELECT     [Project1].[CategoryID] AS [CategoryID],     [Project1].[C1] AS [C1],     [Project1].[ProductID] AS [ProductID],     [Project1].[CategoryID1] AS [CategoryID1],     [Project1].[ProductName] AS [ProductName],     [Project1].[UnitPrice] AS [UnitPrice],     [Project1].[UnitsInStock] AS [UnitsInStock],     [Project1].[Discontinued] AS [Discontinued]    FROM ( SELECT         [GroupBy1].[K1] AS [CategoryID],         [Extent2].[ProductID] AS [ProductID],         [Extent2].[CategoryID] AS [CategoryID1],         [Extent2].[ProductName] AS [ProductName],         [Extent2].[UnitPrice] AS [UnitPrice],         [Extent2].[UnitsInStock] AS [UnitsInStock],         [Extent2].[Discontinued] AS [Discontinued],         CASE WHEN ([Extent2].[ProductID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]        FROM   (SELECT             [Extent1].[CategoryID] AS [K1],             MIN([Extent1].[UnitPrice]) AS [A1]            FROM [dbo].[Product] AS [Extent1]            GROUP BY [Extent1].[CategoryID] ) AS [GroupBy1]        LEFT OUTER JOIN [dbo].[Product] AS [Extent2] ON ([GroupBy1].[K1] = [Extent2].[CategoryID]) AND ([Extent2].[UnitPrice] = [GroupBy1].[A1])    )  AS [Project1]    ORDER BY [Project1].[CategoryID] ASC, [Project1].[C1] ASC
复制代码

7. Max

var expr = context.Products    .Max(p => p.UnitPrice);
var expr = context.Products    .Select(p => p.UnitPrice)    .Max();
复制代码
SELECT     [GroupBy1].[A1] AS [C1]    FROM ( SELECT         MAX([Extent1].[UnitPrice]) AS [A1]        FROM [dbo].[Product] AS [Extent1]    )  AS [GroupBy1]
复制代码

8.Avg

var expr = context.Products    .Select(p => p.UnitPrice)    .Average();
var expr = context.Products    .Average(p => p.UnitPrice);
复制代码
SELECT     [GroupBy1].[A1] AS [C1]    FROM ( SELECT         AVG([Extent1].[UnitPrice]) AS [A1]        FROM [dbo].[Product] AS [Extent1]    )  AS [GroupBy1]
复制代码

  查找单个类别中单价高于平均价的产品:

复制代码
var expr = from p in context.Products            group p by p.CategoryID into g            select new            {                CategoryID = g.Key,                ExpensiveProducts = from p2 in g                                    where p2.UnitPrice > g.Average(p3 => p3.UnitPrice)                                    select p2            };
复制代码
复制代码
SELECT     [Project1].[CategoryID] AS [CategoryID],     [Project1].[C1] AS [C1],     [Project1].[ProductID] AS [ProductID],     [Project1].[CategoryID1] AS [CategoryID1],     [Project1].[ProductName] AS [ProductName],     [Project1].[UnitPrice] AS [UnitPrice],     [Project1].[UnitsInStock] AS [UnitsInStock],     [Project1].[Discontinued] AS [Discontinued]    FROM ( SELECT         [GroupBy1].[K1] AS [CategoryID],         [Extent2].[ProductID] AS [ProductID],         [Extent2].[CategoryID] AS [CategoryID1],         [Extent2].[ProductName] AS [ProductName],         [Extent2].[UnitPrice] AS [UnitPrice],         [Extent2].[UnitsInStock] AS [UnitsInStock],         [Extent2].[Discontinued] AS [Discontinued],         CASE WHEN ([Extent2].[ProductID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]        FROM   (SELECT             [Extent1].[CategoryID] AS [K1],             AVG([Extent1].[UnitPrice]) AS [A1]            FROM [dbo].[Product] AS [Extent1]            GROUP BY [Extent1].[CategoryID] ) AS [GroupBy1]        LEFT OUTER JOIN [dbo].[Product] AS [Extent2] ON ([GroupBy1].[K1] = [Extent2].[CategoryID]) AND ([Extent2].[UnitPrice] > [GroupBy1].[A1])    )  AS [Project1]    ORDER BY [Project1].[CategoryID] ASC, [Project1].[C1] ASC
复制代码
原创粉丝点击