zoukankan      html  css  js  c++  java
  • LINQ查询

    select

     

    描述:查询顾客的公司名、地址信息

    查询句法:

     

    var 构建匿名类型1= from c in ctx.Customers

                          select new

                          {

                              公司名 = c.CompanyName,

                              地址 = c.Address

                          };

    对应SQL

     

    SELECT [t0].[CompanyName],[t0].[Address]

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

     

    描述:查询职员的姓名和雇用年份

    查询句法:

     

    var 构建匿名类型2= from emp in ctx.Employees

                          select new

                          {

                              姓名 = emp.LastName +emp.FirstName,

                              雇用年 = emp.HireDate.Value.Year

                          };

    对应SQL

     

    SELECT [t0].[LastName] + [t0].[FirstName] AS[value], DATEPART(Year, [t0].[HireDate]) AS [value2]

    FROM [dbo].[Employees] AS [t0]

     

    描述:查询顾客的ID以及联系信息(职位和联系人)

    查询句法:

     

    var 构建匿名类型3= from c in ctx.Customers

                          select new

                          {

                              ID= c.CustomerID,

                              联系信息 = new

                              {

                                  职位 = c.ContactTitle,

                                  联系人 = c.ContactName

                              }

                          };

    对应SQL

     

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

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

     

    描述:查询订单号和订单是否超重的信息

    查询句法:

     

    var select带条件 = from o in ctx.Orders

                            select new

                            {

                                订单号 = o.OrderID,

                                是否超重 = o.Freight > 100? "" : ""

                            };

    对应SQL

     

    SELECT [t0].[OrderID],

        (CASE

            WHEN[t0].[Freight] > @p0 THEN @p1

            ELSE@p2

         END)AS [value]

    FROM [dbo].[Orders] AS [t0]

    -- @p0: Input Currency (Size = 0; Prec = 19; Scale= 4) [100]

    -- @p1: Input String (Size = 1; Prec = 0; Scale =0) []

    -- @p2: Input String (Size = 1; Prec = 0; Scale =0) []

     

    where

     

    描述:查询顾客的国家、城市和订单数信息,要求国家是法国并且订单数大于5

    查询句法:

     

    var 多条件 = from c in ctx.Customers

                      where c.Country== "France" &&c.Orders.Count > 5

                      select new

                      {

                          国家 = c.Country,

                          城市 = c.City,

                          订单数 = c.Orders.Count

                      };      

    对应SQL

     

    SELECT [t0].[Country], [t0].[City], (

        SELECTCOUNT(*)

        FROM[dbo].[Orders] AS [t2]

        WHERE[t2].[CustomerID] = [t0].[CustomerID]

        )AS [value]

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

    WHERE ([t0].[Country] = @p0) AND (((

        SELECTCOUNT(*)

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

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

        ))> @p1)

    -- @p0: Input String (Size = 6; Prec = 0; Scale =0) [France]

    -- @p1: Input Int32 (Size = 0; Prec = 0; Scale =0)[5]    

     

    orderby

     

    描述:查询所有没有下属雇员的雇用年和名,按照雇用年倒序,按照名正序

    查询句法:

     

      var 排序 = from emp in ctx.Employees

                     where emp.Employees.Count== 0

                     orderby emp.HireDate.Value.Year descending,emp.FirstNameascending

                     select new

                     {

                         雇用年 = emp.HireDate.Value.Year,

                          = emp.FirstName

                     };     

    对应SQL

     

    SELECT DATEPART(Year, [t0].[HireDate]) AS [value],[t0].[FirstName]

    FROM [dbo].[Employees] AS [t0]

    WHERE ((

        SELECTCOUNT(*)

        FROM[dbo].[Employees] AS [t1]

        WHERE[t1].[ReportsTo] = [t0].[EmployeeID]

        ))= @p0

    ORDER BY DATEPART(Year, [t0].[HireDate]) DESC,[t0].[FirstName]

    -- @p0: Input Int32 (Size = 0; Prec = 0; Scale =0) [0]

     

    分页

     

    描述:按照每页10条记录,查询第二页的顾客

    查询句法:

     

      var 分页 = (from c in ctx.Customers select c).Skip(10).Take(10);

    对应SQL

     

    SELECT TOP 10 [t1].[CustomerID],[t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle],[t1].[Address], [t1].[City], [t1].[Region], [t1].[PostalCode],[t1].[Country], [t1].[Phone], [t1].[Fax]

    FROM (

        SELECTROW_NUMBER() OVER (ORDER BY [t0].[CustomerID], [t0].[CompanyName],[t0].[ContactName], [t0].[ContactTitle], [t0].[Address],[t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Country],[t0].[Phone], [t0].[Fax]) AS [ROW_NUMBER], [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]

        )AS [t1]

    WHERE [t1].[ROW_NUMBER] >@p0

    -- @p0: Input Int32 (Size = 0; Prec = 0; Scale =0) [10]

     

    分组

     

    描述:根据顾客的国家分组,查询顾客数大于5的国家名和顾客数

    查询句法:

     

            var 一般分组 = from c in ctx.Customers

                       group c by c.Country into g

                       where g.Count()> 5

                       orderby g.Count() descending

                       select new

                       {

                           国家 = g.Key,

                           顾客数 = g.Count()

                       };

    对应SQL

     

    SELECT [t1].[Country], [t1].[value3] AS[顾客数]

    FROM (

        SELECTCOUNT(*) AS [value], COUNT(*) AS [value2], COUNT(*) AS [value3],[t0].[Country]

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

        GROUPBY [t0].[Country]

        )AS [t1]

    WHERE [t1].[value] > @p0

    ORDER BY [t1].[value2] DESC

    -- @p0: Input Int32 (Size = 0; Prec = 0; Scale =0) [5]

     

    描述:根据国家和城市分组,查询顾客覆盖的国家和城市

    查询句法:

     

         var 匿名类型分组 = from c in ctx.Customers

                         group c by new {c.City, c.Country } into g

                         orderby g.Key.Country,g.Key.City

                         select new

                         {

                             国家 = g.Key.Country,

                             城市 = g.Key.City

                         };

    对应SQL

     

    SELECT [t1].[Country], [t1].[City]

    FROM (

        SELECT[t0].[City], [t0].[Country]

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

        GROUPBY [t0].[City], [t0].[Country]

        )AS [t1]

    ORDER BY [t1].[Country], [t1].[City]

     

    描述:按照是否超重条件分组,分别查询订单数量

    查询句法:

     

    var 按照条件分组 = from o in ctx.Orders

                         group o by new { 条件 = o.Freight > 100} into g

                         select new

                         {

                             数量 = g.Count(),

                             是否超重 = g.Key.条件 ? "" : ""

                         };

    对应SQL

     

    SELECT

        (CASE

            WHEN[t2].[value2] = 1 THEN @p1

            ELSE@p2

         END)AS [value], [t2].[value] AS [数量]

    FROM (

        SELECTCOUNT(*) AS [value], [t1].[value] AS [value2]

        FROM(

            SELECT

                (CASE

                    WHEN[t0].[Freight] > @p0 THEN 1

                    WHENNOT ([t0].[Freight] > @p0) THEN 0

                    ELSENULL

                 END)AS [value]

            FROM[dbo].[Orders] AS [t0]

            )AS [t1]

        GROUPBY [t1].[value]

        )AS [t2]

    -- @p0: Input Currency (Size = 0; Prec = 19; Scale= 4) [100]

    -- @p1: Input String (Size = 1; Prec = 0; Scale =0) []

    -- @p2: Input String (Size = 1; Prec = 0; Scale =0) []

     

    distinct

     

    描述:查询顾客覆盖的国家

    查询句法:

     

    var 过滤相同项 = (from c in ctx.Customers orderby c.Country selectc.Country).Distinct();

    对应SQL

     

    SELECT DISTINCT [t0].[Country]

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

     

    union

     

    描述:查询城市是A打头和城市包含A的顾客并按照顾客名字排序

    查询句法:

     

    var 连接并且过滤相同项 = (from c in ctx.Customers where c.City.Contains("A"selectc).Union

                (from c in ctx.Customers where c.ContactName.StartsWith("A"selectc).OrderBy(c=> c.ContactName);

    对应SQL

     

    SELECT [t3].[CustomerID], [t3].[CompanyName],[t3].[ContactName], [t3].[ContactTitle], [t3].[Address],[t3].[City], [t3].[Region], [t3].[PostalCode], [t3].[Country],[t3].[Phone], [t3].[Fax]

    FROM (

        SELECT[t2].[CustomerID], [t2].[CompanyName], [t2].[ContactName],[t2].[ContactTitle], [t2].[Address], [t2].[City], [t2].[Region],[t2].[PostalCode], [t2].[Country], [t2].[Phone],[t2].[Fax]

        FROM(

            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[t0].[City] LIKE @p0

            UNION

            SELECT[t1].[CustomerID], [t1].[CompanyName], [t1].[ContactName],[t1].[ContactTitle], [t1].[Address], [t1].[City], [t1].[Region],[t1].[PostalCode], [t1].[Country], [t1].[Phone],[t1].[Fax]

            FROM[dbo].[Customers] AS [t1]

            WHERE[t1].[ContactName] LIKE @p1

            )AS [t2]

        )AS [t3]

    ORDER BY [t3].[ContactName]

    -- @p0: Input String (Size = 3; Prec = 0; Scale =0) [%A%]

    -- @p1: Input String (Size = 2; Prec = 0; Scale =0) [A%]

     

    concat

     

    描述:查询城市是A打头和城市包含A的顾客并按照顾客名字排序,相同的顾客信息不会过滤

    查询句法:

     

    var 连接并且不过滤相同项 = (from c in ctx.Customers where c.City.Contains("A")select c).Concat

                (from c in ctx.Customers where c.ContactName.StartsWith("A"selectc).OrderBy(c=> c.ContactName);

    对应SQL

     

    SELECT [t3].[CustomerID], [t3].[CompanyName],[t3].[ContactName], [t3].[ContactTitle], [t3].[Address],[t3].[City], [t3].[Region], [t3].[PostalCode], [t3].[Country],[t3].[Phone], [t3].[Fax]

    FROM (

        SELECT[t2].[CustomerID], [t2].[CompanyName], [t2].[ContactName],[t2].[ContactTitle], [t2].[Address], [t2].[City], [t2].[Region],[t2].[PostalCode], [t2].[Country], [t2].[Phone],[t2].[Fax]

        FROM(

            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[t0].[City] LIKE @p0

            UNIONALL

            SELECT[t1].[CustomerID], [t1].[CompanyName], [t1].[ContactName],[t1].[ContactTitle], [t1].[Address], [t1].[City], [t1].[Region],[t1].[PostalCode], [t1].[Country], [t1].[Phone],[t1].[Fax]

            FROM[dbo].[Customers] AS [t1]

            WHERE[t1].[ContactName] LIKE @p1

            )AS [t2]

        )AS [t3]

    ORDER BY [t3].[ContactName]

    -- @p0: Input String (Size = 3; Prec = 0; Scale =0) [%A%]

    -- @p1: Input String (Size = 2; Prec = 0; Scale =0) [A%]

     

    取相交项

     

    描述:查询城市是A打头的顾客和城市包含A的顾客的交集,并按照顾客名字排序

    查询句法:

     

    var 取相交项 = (from c in ctx.Customers where c.City.Contains("A"selectc).Intersect

                (from c in ctx.Customers where c.ContactName.StartsWith("A"selectc).OrderBy(c=> c.ContactName);

    对应SQL

     

    SELECT [t1].[CustomerID], [t1].[CompanyName],[t1].[ContactName], [t1].[ContactTitle], [t1].[Address],[t1].[City], [t1].[Region], [t1].[PostalCode], [t1].[Country],[t1].[Phone], [t1].[Fax]

    FROM (

        SELECTDISTINCT [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]

        )AS [t1]

    WHERE (EXISTS(

        SELECTNULL AS [EMPTY]

        FROM[dbo].[Customers] AS [t2]

        WHERE([t1].[CustomerID] = [t2].[CustomerID]) AND ([t2].[ContactName]LIKE @p0)

        ))AND ([t1].[City] LIKE @p1)

    ORDER BY [t1].[ContactName]

    -- @p0: Input String (Size = 2; Prec = 0; Scale =0) [A%]

    -- @p1: Input String (Size = 3; Prec = 0; Scale =0) [%A%]

     

    排除相交项

     

    描述:查询城市包含A的顾客并从中删除城市以A开头的顾客,并按照顾客名字排序

    查询句法:

     

    var 排除相交项 = (from c in ctx.Customers where c.City.Contains("A"selectc).Except

                (from c in ctx.Customers where c.ContactName.StartsWith("A"selectc).OrderBy(c=> c.ContactName);

    对应SQL

     

    SELECT [t1].[CustomerID], [t1].[CompanyName],[t1].[ContactName], [t1].[ContactTitle], [t1].[Address],[t1].[City], [t1].[Region], [t1].[PostalCode], [t1].[Country],[t1].[Phone], [t1].[Fax]

    FROM (

        SELECTDISTINCT [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]

        )AS [t1]

    WHERE (NOT (EXISTS(

        SELECTNULL AS [EMPTY]

        FROM[dbo].[Customers] AS [t2]

        WHERE([t1].[CustomerID] = [t2].[CustomerID]) AND ([t2].[ContactName]LIKE @p0)

        )))AND ([t1].[City] LIKE @p1)

    ORDER BY [t1].[ContactName]

    -- @p0: Input String (Size = 2; Prec = 0; Scale =0) [A%]

    -- @p1: Input String (Size = 3; Prec = 0; Scale =0) [%A%]

     

    子查询

     

    描述:查询订单数超过5的顾客信息

    查询句法:

     

    var 子查询 = from c in ctx.Customers

                       where

                           (from o in ctx.Orders group o by o.CustomerID into o whereo.Count()> 5 select o.Key).Contains(c.CustomerID)

                       select 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 EXISTS(

        SELECTNULL AS [EMPTY]

        FROM(

            SELECTCOUNT(*) AS [value], [t1].[CustomerID]

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

            GROUPBY [t1].[CustomerID]

            )AS [t2]

        WHERE([t2].[CustomerID] = [t0].[CustomerID]) AND ([t2].[value]> @p0)

        )

    -- @p0: Input Int32 (Size = 0; Prec = 0; Scale =0) [5]

     

    in操作

     

    描述:查询指定城市中的客户

    查询句法:

     

            var in操作 = from c in ctx.Customers

                        where new string[]{ "Brandenburg""Cowes""Stavern"}.Contains(c.City)

                        select 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 [t0].[City] IN (@p0, @p1, @p2)

    -- @p0: Input String (Size = 11; Prec = 0; Scale =0) [Brandenburg]

    -- @p1: Input String (Size = 5; Prec = 0; Scale =0) [Cowes]

    -- @p2: Input String (Size = 7; Prec = 0; Scale =0) [Stavern]

     

    join

     

    描述:内连接,没有分类的产品查询不到

    查询句法:

     

    var innerjoin = from p in ctx.Products

                            join c in ctx.Categories

                            on p.CategoryID equals c.CategoryID

                            select p.ProductName;

    对应SQL

     

    SELECT COUNT(*) AS [value]

    FROM [dbo].[Products] AS [t0]

    INNER JOIN [dbo].[Categories] AS [t1] ON[t0].[CategoryID] = ([t1].[CategoryID])

     

    描述:外连接,没有分类的产品也能查询到

    查询句法:

     

    var leftjoin = from p in ctx.Products

                           join c in ctx.Categories

                           on p.CategoryID equals c.CategoryID

                           into pro

                           from x in pro.DefaultIfEmpty()

                           select p.ProductName;

    对应SQL

     

    SELECT COUNT(*) AS [value]

    FROM [dbo].[Products] AS [t0]

    LEFT OUTER JOIN [dbo].[Categories] AS [t1] ON[t0].[CategoryID] = ([t1].[CategoryID])

     

           你可能会很奇怪,原先很复杂的SQL使用查询句法会很简单(比如按照条件分组)。但是原先觉得很好理解的SQL使用查询句法会觉得很复杂(比如连接查询)。其实,我们还可以通过其它方式进行连接操作,在以后说DataLoadOptions类型的时候会再说。虽然Linq to sql已经非常智能了,但是对于非常复杂的查询还是建议通过存储过程实现,下次讲解如何调用存储过程。


    本文转自:http://www.cnblogs.com/lovecherry/archive/2007/08/17/859826.html

    相关内容网址:http://www.cnblogs.com/lovecherry/archive/2007/08/13/853754.html


  • 相关阅读:
    java Socket Tcp 浏览器和服务器(二)
    java Socket Tcp 浏览器和服务器(一)
    java Socket Tcp示例三则(服务端处理数据、上传文件)
    java Socket Udp聊天
    centos 图形界面和命令行界面切换
    python 文件中的中文编码解决方法
    PostgreSQL与MySQL比较(转)
    Python 的开发环境
    Windows 下 pip和easy_install 的安装与使用
    Linux 下的下载文件命令
  • 原文地址:https://www.cnblogs.com/dcrenl/p/4041113.html
Copyright © 2011-2022 走看看