多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

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

aspnet教程

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

    ASP.NET MVC

    ASP.NET 編程指南

    ASP.NET 語言集成查詢

    閱讀 (2347)

    語言集成查詢

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

    對象來負責連接訪問數據的組件——稱為數據訪問層( 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

    關閉
    程序員人生
    主站蜘蛛池模板: 午夜欧美福利 | 新japanesevideo乱熟 | 亚洲人成网亚洲欧洲无码 | 久久久久久久久毛片精品 | 国产精品久久久久久久久久免费 | 国产区精品一区二区不卡中文 | 免费观看一级欧美大 | 美国免费高清一级毛片 | 250pp久久新| 亚洲国产天堂久久九九九 | 日韩精品一 | 精品久久香蕉国产线看观看亚洲 | 欧美视频三区 | 图片区小说区 | 最近中文字幕视频完整 | 亚洲hd | 国产伊人自拍 | 免费视频成人 | 日韩国产免费一区二区三区 | 久久精品国产亚洲片 | 一级毛片一级毛片一级毛片aaav | 精品久久综合一区二区 | 午夜爽爽爽男女免费观看hd | 国内自拍视频在线观看 | 视频一区二区不卡 | 真人肉体一级毛片 | 视频在线a | 中文字幕乱码无限2021丫丫 | 亚洲精品乱码久久久久久蜜桃 | 欧美三级成人理伦 | 国产第一区二区三区在线观看 | 亚洲精品国产第一区第二区国 | 欧美18一19sex性瑜伽 | 欧美一级日本一级韩国一级 | 亚洲性色视频 | 亚洲日产2021三区在线 | 欧美日韩亚洲综合久久久 | 在线观看亚洲免费视频 | 国产一级淫片a | 老司机免费福利在线观看 | xx肥妇人爽妇网 |