風影ASP.NET基礎教育14 LINQ TO SQL基礎

30224 ワード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            NorthwindEntities North = new NorthwindEntities();
            #region     
            //Linq        from --- where--- select 
            //T-sql       select --- from --- where
 
 
 
 
 
            //var data = from p in North.Products
            //           where p.ProductID < 20
            //           select p;
            // select * from Products where Productid<20
 
            //var data =
            //    from c in North.Categories
            //    where c.CategoryID == 3
            //    select c;
            //   1994 1 1 
            // from e in db.Employees
            // where e.HireDate >= new DateTime(1994, 1, 1)
            // select e;
 
            //var data = from p in North.Products
            //           where p.ProductID < 20
            //           select new {p.ProductName,p.ProductID,p.CategoryID};
            //select ProductName,ProductID,CategoryID from products where productid<20
 
 
            //var data = from p in North.Products
            //           where p.ProductID < 20
            //           select new { p.ProductName, p.ProductID, p.CategoryID };
            //this.GridView1.DataSource = data;
            //this.GridView1.DataBind();
            #endregion
 
            #region       
            //                    :
            // var q =
            //    from p in db.Products
            //    where p.UnitsInStock <= p.ReorderLevel && !p.Discontinued
            //    select p;
            //   UnitPrice   10        :
            // var q =
            //    from p in db.Products
            //    where p.UnitPrice > 10m || p.Discontinued
            //    select p; 
            //           where    UnitPrice  10       。
            //var q =
            //    db.Products.Where(p=>p.UnitPrice > 10m).Where(p=>p.Discontinued);
 
 
            #endregion
 
            #region First()  
 
            //          ,      SQL    TOP (1)。
 
            //    :           。
            // Shipper shipper = db.Shippers.First();
            //  :  CustomerID  “BONAP”     
            // Customer cust = db.Customers.First(c => c.CustomerID == "BONAP");
            //  :       10.00    :
            // Order ord = db.Orders.First(o => o.Freight > 10.00M);
            #endregion
 
            #region Select/Distinct       
            //    :o(∩_∩)o…    。
 
            //  : SQL    select         ,       select                              ;  。
 
            //Select/Distinct    9   ,       、       、    、      、    、      、       、        、Distinct  。
 
            //1.    :
 
            //                  。
            // var q =
            //    from c in db.Customers
            //    select c.ContactName; 
            //  :                ,           ,            ,         ,       (deferred loading)。  ,                   。     ToList()  ToArray()            ,            。      (deferred loading)     SQL          ,    。
 
            //2.      :
 
            //  :     C#3.0    。                                      。              :    property     。  ,var d = new { Name = "s" };          property  Name    ,           ,      。  var d = new {"s"};       。  ,           property   。  string c = "d";var d = new { c};          。                c property。
            //     :new{c.ContactName,c.Phone};ContactName Phone                   property。             ,        ,        , ContactName Phone,           。            property   。
            // var q =
            //    from c in db.Customers
            //    select new {c.ContactName, c.Phone}; 
            //      :   SELECT                         
            // var q =
            //    from e in db.Employees
            //    select new
            //    {
            //        Name = e.FirstName + " " + e.LastName,
            //        Phone = e.HomePhone
            //    }; 
            //      :  SELECT                     ,  FirstName LastName         “Name”,          HomePhone      Phone。
            // var q =
            //    from p in db.Products
            //    select new
            //    {
            //        p.ProductID,
            //        HalfPrice = p.UnitPrice / 2
            //    }; 
            //      :  SELECT            ID  HalfPrice(         2    )   。
 
            //3.    :
 
            //  :  SQL   :case when condition then else。
            // var q =
            //    from p in db.Products
            //    select new
            //    {
            //        p.ProductName,
            //        Availability =
            //        p.UnitsInStock - p.UnitsOnOrder < 0 ? 
            //        "Out Of Stock" : "In Stock"
            //    }; 
            //      :  SELECT                     。
 
            //4.      :
 
            //  :               。
            // var q =
            //    from e in db.Employees
            //    select new Name
            //    {
            //        FirstName = e.FirstName,
            //        LastName = e.LastName
            //    }; 
            //      :  SELECT              。
 
            //5.    :
 
            //  :  where  ,      。
            // var q =
            //    from c in db.Customers
            //    where c.City == "London"
            //    select c.ContactName; 
            //      :  SELECT WHERE                。
 
            //6.shaped  (    ):
 
            //  : select         ,        ,          。
            // var q =
            //    from c in db.Customers
            //    select new {
            //        c.CustomerID,
            //        CompanyInfo = new {c.CompanyName, c.City, c.Country},
            //        ContactInfo = new {c.ContactName, c.ContactTitle}
            //    }; 
            //    :  SELECT                    。     ID     (    ,  ,  )      (      )。
 
            //7.      :
 
            //  :            DiscountedProducts   ,       。              。
            // var q =
            //    from o in db.Orders
            //    select new {
            //        o.OrderID,
            //        DiscountedProducts =
            //            from od in o.OrderDetails
            //            where od.Discount > 0.0
            //            select od,
            //        FreeShippingDiscount = o.Freight
            //    }; 
            //    :              OrderID    、                      。
 
            //8.        (LocalMethodCall):
 
            //              PhoneNumberConverter            。
            //         var q = from c in db.Customers
            //         where c.Country == "UK" || c.Country == "USA"
            //         select new
            //         {
            //             c.CustomerID,
            //             c.CompanyName,
            //             Phone = c.Phone,
            //             InternationalPhone = 
            //             PhoneNumberConverter(c.Country, c.Phone)
            //         }; 
            //        PhoneNumberConverter    :
            //        public string PhoneNumberConverter(string Country, string Phone)
            //       {
            //             Phone = Phone.Replace(" ", "").Replace(")", ")-");
            //             switch (Country)
            //             {
            //                  case "USA":
            //                      return "1-" + Phone;
            //                  case "UK":
            //                      return "44-" + Phone;
            //                  default:
            //                      return Phone;
            //    }
            //} 
            //                          XDocument
            // XDocument doc = new XDocument(
            //    new XElement("Customers", from c in db.Customers
            //              where c.Country == "UK" || c.Country == "USA"
            //              select (new XElement("Customer",
            //                      new XAttribute("CustomerID", c.CustomerID),
            //                      new XAttribute("CompanyName", c.CompanyName),
            //                      new XAttribute("InterationalPhone", 
            //                       PhoneNumberConverter(c.Country, c.Phone))
            //                     )))); 
            //9.Distinct  :
 
            //  :          。           。  SQL   :SELECT DISTINCT [City] FROM [Customers]
            // var q = (
            //    from c in db.Customers
            //    select c.City )
            //    .Distinct(); 
            //    :         。
 
            #endregion
 
            #region Count/Sum/Min/Max/Avg   
            /*
                 :     ,           ,  ,   ,   ,   。
 
   
 
   
             * Count
 
   
                      :          ,  INT  ;   。  SQL   :SELECT COUNT(*) FROM 
 
   
                1.    :
 
   
                    var q = db.Customers.Count(); 
                2.     :(Lambda)
                    var q = db.Products.Count(p => !p.Discontinued); 
 
   
             * LongCount
                 :          ,  LONG  ;   。                   LongCount       ,   long  ,    。  SQL   :SELECT COUNT_BIG(*) FROM 
                var q = db.Customers.LongCount(); 
 
   
             * Sum
 
   
                  :             ,    INT    ;   。  SQL   :SELECT SUM(…) FROM 
 
   
                1.    :
 
   
                    var q = db.Orders.Select(o => o.Freight).Sum(); 
                2.    :
 
   
                    var q = db.Products.Sum(p => p.UnitsOnOrder); 
 
   
             * Min
 
   
                      :           ;   。  SQL   :SELECT MIN(…) FROM 
 
   
                1.    :
 
   
                    var q = db.Products.Select(p => p.UnitPrice).Min(); 
                2.    :
 
   
                     var q = db.Orders.Min(o => o.Freight); 
                3.  :
 
   
                     var categories =
                        from p in db.Products
                        group p by p.UnitPrice into g
                        select new {
                                CategoryID = g.Key,
                                CheapestProducts =
                                    from p2 in g
                                    where p2.UnitPrice == g.Min(p3 => p3.UnitPrice)
                                    select p2
                       }; 
          // select CategoryID,min(price) from Products group by CategoryID
             * Max
 
   
                      :           ;   。  SQL   :SELECT MAX(…) FROM
 
   
                1.    :
 
   
                    var q = db.Employees.Select(e => e.HireDate).Max(); 
                2.    :
 
   
                    var q = db.Products.Max(p => p.UnitsInStock); 
                3.  :
 
   
                    var categories =
                        from p in db.Products
                        group p by p.CategoryID into g
                        select new {
                            g.Key,
                            MostExpensiveProducts =
                                from p2 in g
                                where p2.UnitPrice == g.Max(p3 => p3.UnitPrice)
                                select p2
                            }; 
 
   
             * Average
 
   
                      :                。          ,       double;   。  SQL   :SELECT AVG(…) FROM
 
   
                1.    :
 
   
                    var q = db.Orders.Select(o => o.Freight).Average(); 
                2.    :
 
   
                    var q = db.Products.Average(p => p.UnitPrice); 
                3.  :
 
   
                    var categories =
                        from p in db.Products
                        group p by p.CategoryID into g
                        select new {
                             g.Key, 
                            ExpensiveProducts =
                                from p2 in g
                                where p2.UnitPrice > g.Average(p3 => p3.UnitPrice)
                                select p2
                        }; 
 
   
 
   
                   :             ;   。   :                                ,           。           ,              。
 
   
           LINQ to SQL  
 
   
Where          ;  
Select          ;  
Distinct               ;  
Count                  ,  INT  ;   
LongCount            ,  LONG  ;   
Sum                       ,    INT    ;   
Min                      ;   
Max                      ;   
Average                      。          ,       double;   
Aggregate                ;   
 
   
             */
 
            #endregion
 
        }
    }
}

<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->