日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

aspnet教程

  • ASP.NET 教程
  • ASP.NET 簡介
  • ASP.NET Razor

    ASP.NET MVC

    ASP.NET 編程指南

    ASP.NET 語言集成查詢

    閱讀 (2351)

    語言集成查詢

    大多數應用都是以數據為中心的,然而大多數的數據倉庫是關系型數據庫。這些年,設計者和開發者設計了基于對象模型的應用程序。

    對象來負責連接訪問數據的組件——稱為數據訪問層( DAL )。這里我們需要考慮三點:

    • 一個應用程序所需要的所有數據可以不存儲在一個資源中。這個資源可以是關系型數據庫、業務對象、XML文件或者一個WEB服務器。
    • 訪問內存中的對象要比訪問數據庫、XML文件中的數據更簡單,更廉價。
    • 被訪問到的數據不是直接使用的,而是被轉存、排序、分組、修改等。

    因此如果存在只是用幾行代碼就能實現輕易整合各種各樣的數據——可以整合來自不同源的數據,并且能夠執行基本的數據操作的工具,那將非常有用。

    語言集成查詢( LINQ )就是上述那樣的一種工具。 LINQ 是 .NET Framework 3.5 的一個擴展集并且它的管理語言使查詢更類似于是一種對象。它定義了一種通用的語法和程序模型,使我們可以使用一種慣用的語法完成查找不同類型的數據。

    相關操作像查找、工程、鏈接、分組、分區、集合操作等可以在 LINQ 中使用,并且在 .NET Framework 3.5 中的 C# 和 VB 編譯器支持 LINQ 的語法,這就使得它可以通過配置數據來存儲,而不需要求助于 ADO.NET。

    舉個例子,在 Northwind 數據庫中查詢 Constomers 這張表,使用 C# 中的 LINQ ,代碼應該是這樣:

    var data = from c in dataContext.Customers
    where c.Country == "Spain"
    select c;

    其中:

    • from關鍵字邏輯上依次通過每個集合。
    • 包含關鍵字where的表達式會比較集合中的每個對象。
    • select聲明會選擇被比較出的對象加入到列表中并返回。
    • 關鍵字var用于變量聲明。因為返回對象的準確類型不明確,它表明信息需要被動態的推測。

    LINQ 查詢語句可以應用在任何繼承于 IEnumerable 的有數據支撐的類,這里 T 可以是任何一個數據類型,例如 List< Book >。

    讓我們來看一個示例理解一下概念。示例中使用了如下類:Book.cs

    public class Books
    {
        public string ID {get; set;}
        public string Title { get; set; }
        public decimal Price { get; set; }
        public DateTime DateOfRelease { get; set; }
    
        public static List<Books> GetBooks()
        {
            List<Books> list = new List<Books>();
            list.Add(new Books { ID = "001", 
                Title = "Programming in C#", 
                Price = 634.76m, 
                DateOfRelease = Convert.ToDateTime("2010-02-05") });
    
            list.Add(new Books { ID = "002", 
                Title = "Learn Jave in 30 days", 
                Price = 250.76m, 
                DateOfRelease = Convert.ToDateTime("2011-08-15") });
    
            list.Add(new Books { ID = "003", 
                Title = "Programming in ASP.Net 4.0", 
                Price = 700.00m, 
                DateOfRelease = Convert.ToDateTime("2011-02-05") });
    
            list.Add(new Books { ID = "004", 
                Title = "VB.Net Made Easy", 
                Price = 500.99m, 
                DateOfRelease = Convert.ToDateTime("2011-12-31") });
    
            list.Add(new Books { ID = "005", 
                Title = "Programming in C", 
                Price = 314.76m, 
                DateOfRelease = Convert.ToDateTime("2010-02-05") });
    
            list.Add(new Books { ID = "006", 
                Title = "Programming in C++", 
                Price = 456.76m, 
                DateOfRelease = Convert.ToDateTime("2010-02-05") });
    
            list.Add(new Books { ID = "007", 
                Title = "Datebase Developement", 
                Price = 1000.76m, 
                DateOfRelease = Convert.ToDateTime("2010-02-05") });
    
            return list;
        }
    }

    在 web 網頁中使用這個類要有簡單的標簽控制,來顯示書的標題。Page_Load 方法創建了一個書的列表并且通過使用 LINQ 查詢返回標題:

    public partial class simplequery : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            List<Books> books = Books.GetBooks();
            var booktitles = from b in books select b.Title;
    
            foreach (var title in booktitles)
                lblbooks.Text += String.Format("{0} <br />", title);
        }
    }

    當網頁被運行,標簽顯示查詢結果:

    linq_result.jpg

    上面的 LINQ 表達式:

    var booktitles = 
    from b in books 
    select b.Title;

    等價于下述 SQL 語句:

    SELECT Title from Books

    LINQ 運算符

    除了到目前為止使用過的運算符之外,還有很多其他運算符來執行查詢子句。我們來看一些運算符和子句。

    join 子句

    SQL 中的‘join clause’用來連接兩個數據表并顯示在兩個數據表中都出現的列中的數據集合。LINQ 也可以支持這種功能。為了檢測這一點,在之前的工程里增加另一個類名為 Saledetails.cs:

    public class Salesdetails
    {
        public int sales { get; set; }
        public int pages { get; set; }
        public string ID {get; set;}
    
        public static IEnumerable<Salesdetails> getsalesdetails()
        { 
            Salesdetails[] sd = 
            {
                new Salesdetails { ID = "001", pages=678, sales = 110000},
                new Salesdetails { ID = "002", pages=789, sales = 60000},
                new Salesdetails { ID = "003", pages=456, sales = 40000},
                new Salesdetails { ID = "004", pages=900, sales = 80000},
                new Salesdetails { ID = "005", pages=456, sales = 90000},
                new Salesdetails { ID = "006", pages=870, sales = 50000},
                new Salesdetails { ID = "007", pages=675, sales = 40000},
            };
    
            return sd.OfType<Salesdetails>();
        }
    }

    在 Page_Load 函數中添加代碼來用 join 子句處理在兩張表里完成查詢:

    protected void Page_Load(object sender, EventArgs e)
    {
        IEnumerable<Books> books = Books.GetBooks();
        IEnumerable<Salesdetails> sales = Salesdetails.getsalesdetails();
    
        var booktitles = from b in books join s in sales on b.ID equals s.ID
            select new { Name = b.Title, Pages = s.pages };
    
        foreach (var title in booktitles)
            lblbooks.Text += String.Format("{0} <br />", title);
    }

    結果頁顯示如下:

    linq_result2.jpg

    where 子句

    where 子句允許在查詢中添加篩選條件。例如,如果你想獲得頁數多于 500 的書目,可以改變 Page_Load 方法中的句柄成下述樣子:

    var booktitles = from b in books join s in sales on b.ID equals s.ID
        where s.pages > 500 select new { Name = b.Title, Pages = s.pages };

    查詢語句只返回那些頁數大于 500 的列:

    linq_result3.jpg

    正序倒序排序子句

    這些子句允許將查詢結果進行排序。為了查詢出標題、頁數和書的價格,并且按照價格排序,在 Page_Load 方法中的句柄里寫如下代碼:

    var booktitles = from b in books join s in sales on b.ID equals s.ID
        orderby b.Price select new { Name = b.Title,  Pages = s.pages, Price = b.Price};

    返回的元組是:

    linq_result4.jpg

    Let 子句

    let 子句允許定義一個變量并且將數據計算的一個值賦給它。舉個例子,計從上述兩個銷售值中計算總銷售值,你需要這樣計算:

    TotalSale = Price of the Book * Sales

    為了完成這個算式,加入下面這個代碼片段在 Page_Load 方法的句柄里:

    let 子句允許定義一個變量并且將數據計算的一個值賦給它。舉個例子,計從上述兩個銷售值中計算總銷售值,你需要這樣計算:

    var booktitles = from b in book join s in sales on b.ID equals s.ID
       let totalprofit = (b.Price * s.sales)
       select new { Name = b.Title, TotalSale = totalprofit};

    查詢結果如下圖所示:

    linq_result5.jpg

    關閉
    程序員人生
    主站蜘蛛池模板: 成人手机在线免费视频 | 日韩中文一区二区 | 国产精品一区不卡 | 亚洲aa在线 | www.日| 久热九九 | 国产精品成av人在线视午夜片 | 欧美麻豆| 亚洲国产一区二区三区 | 久久中文网 | 九九热在线视频观看这里只有精品 | 在线观看黄网 | 99精品在线视频播放 | 日韩免费中文字幕 | 亚洲小少妇裸体bbw 亚洲免费成人 | 国产一区二区在线观看视频 | 午夜精品在线 | 日韩资源在线 | 亚洲狼人 | 精品综合 | www.狠狠撸.com| 国产区视频 | 国产视频在线一区二区 | 好看的黄色网址 | 美女视频一区二区 | 亚洲精品20p| 在线免费激情视频 | 91av视屏| 国产人成精品一区二区三 | 国产中文一区二区三区 | 久久久天堂 | 精品国产乱码久久久久久牛牛 | 狠狠久久综合 | 久久日韩精品 | 久久高清 | 青青草亚洲 | 国产精品二 | 国产伦精品一区二区三区视频黑人 | av片在线观看网站 | 国产精品精品视频 | 久久久久久久一区二区 |