成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

LINQ查詢探討:一個主從報表和數據統計

開發 后端
LINQ 提供了一條更常規的途徑即給 .Net Framework 添加一些可以應用于所有信息源的具有多種用途的語法查詢特性,LINQ查詢結果序列可以被綁定到任何ASP.NET中的數據綁定控件。

在LINQ 查詢中,始終會用到對象。可以使用相同的基本編碼模式來查詢和轉換 XML 文檔、SQL 數據庫、ADO.NET 數據集、.NET 集合中的數據以及對其LINQ 提供程序可用的任何其他格式的數據。

以前,我們要在某個報表中顯示統計信息一般有兩種方法:1通過一個SQL查詢——我們可以向數據庫發出一個額外的查詢來為某個特定的類別計算統計信息。SQL包含一系列的聚合函數,并由GROUP BY子句指定應該根據什么數據來進行統計。2在表示層中統計已經獲取的信息。

然而這兩個方法都有他們的缺點:

第一種方法很明顯,他增加了一次到數據庫的往返,因為在獲取報表信息的時候我們已經對數據庫進行了一次訪問,而我們要獲得的統計信息可以從報表中獲取。而且無法獲取更加復雜的業務統計。

第二種方法則沒有很好的讓層次劃分出來,我們更加希望表示層中僅僅使用方法而不要去設計這些方法。(尤其是一些業務規則,比如NBA中有“球員效率”這項數據,但如果不是很熟悉這項業務的程序員是不知道這個效率是如何計算的。)

既然我們使用了分層架構,就應該把這些職能分開,表示層的設計者只需要設計UI,了解方法的名稱就可以了。具體的業務計算應該留下來給業務邏輯層的設計者去設計。

有了LINQ查詢我們就可以把這些東西都放到業務層去了,因為數據操作已經對象化,在邏輯層中就可以方便地統計數據并且直接在表示層調用這樣的方法。

按部就班的做

1我們需要一個下來列表來選擇門類,所以我們需要一個門類列表,在Productbll中添加一個新的方法GetCategory代碼如下:

  1. [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]  
  2.    public IQueryable GetCategory()  
  3.    {  
  4.        var category = from p in db.Categories  
  5.                      select p;  
  6.        return category;  

2.代碼很簡單我就不解釋了,由于我們的重點不是這個門類選擇列表,所以我直接選擇了全部字段,其實只要ID和Name兩個字段就可以了。新建一個WEB窗體,添加一個下拉列表,在自動回送上打勾,選擇新建數據源。

3.LINQ查詢下數據源選擇對象數據源,選擇Productbll,方法選擇GetCategory,點擊完成。字段顯示填寫CategoryName,字段值填寫CategoryID。

4.然后就是顯示統計和從報表的方法,在GetCategory方法下添加一個新方法GetProductByCategoryID,代碼如下:

  1. [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]  
  2.    public IQueryable GetProductByCategoryID(int categoryID,out decimal? total)  
  3.    {  
  4.        total = 0;  
  5.        var product = from p in db.Products  
  6.                      where p.CategoryID == categoryID  
  7.                      select p;  
  8.        foreach (Product p in product)  
  9.            total += p.UnitPrice;  
  10.        return product;  

5.簡單的代碼解釋:

1)這是一個包含2個輸出的方法,方法本身是可以作為數據源的IQueryable類型,另外還會輸出一個十進制類型數,也就是總價

2)獲取CategoryID與輸入參數categoryID相匹配的記錄

3)遍歷這些記錄,獲取他們的價格之和

4)返回這些記錄與總價

6.在頁面中添加一個GridView與一個Lable控件,雙擊下拉列表,進入事件,加入如下代碼:

  1. decimal? sum = 0;  
  2.        GridView1.DataSource=product.GetProductByCategoryID(Convert.ToInt16(DropDownList1.SelectedValue),out sum);  
  3.        GridView1.DataBind();  
  4.        Label1.Text = "總價:"+Convert.ToString(sum); 

7.運行該頁面,任意選擇一個門類,觀察總價和這些記錄。

小結:

這章的內容并不多,需要注意的是我們使用了返回多個結果的方法,方法本身是IQueryable類型,另外還會輸出一個十進制類型數,也就是總價。我們在邏輯層中利用LINQ查詢結果,并且進行遍歷,獲得總價。在表示層中我們僅僅調用了方法,而且對數據庫僅有一次操作。

比起直接用SQL獲取總價來說,我們的方法少了一次數據庫的往返。比起在表示層寫方法,我們的方法的層次更加分明。在沒有使用這樣的結構以前,也可以在邏輯層這么做,只不過還需要手動的把數據轉換成可以遍歷的對象,而現在一切都方便了。可以直接對Product表中的記錄使用for each.除此之外我們不需要做更多的工作。

本貼來自天極網群樂社區

【編輯推薦】

  1. LINQ查詢的目的與實現手段
  2. LINQ查詢表達式深入剖析
  3. 實例二:綁定到LINQ查詢的結果
  4. LINQ——語言級集成查詢入門指南
  5. LINQ的演變及其對C#設計的影響
責任編輯:林琳 來源: 天極網群樂社區
相關推薦

2009-09-10 16:22:48

LINQ建立數據報表

2015-02-12 16:05:51

微信SDK

2015-02-12 16:17:09

微信SDK

2015-02-12 15:45:05

微信SDK

2020-09-10 09:39:56

大數據大數據統計數據

2023-12-08 07:55:37

MySQL數據統計InnoDB

2015-02-12 16:53:22

微信SDK

2009-09-18 13:58:00

LINQ查詢數據庫

2009-09-14 13:25:08

LINQ多方面探討

2013-08-30 10:08:16

微信公眾平臺數據統計功能社交應用

2016-12-16 12:43:38

大數據OLAP數據統計

2019-07-11 10:52:02

Python統計數據

2018-08-31 08:01:27

數據統計機器學習深度學習

2025-04-09 11:20:00

LINQ代碼數據處理

2009-09-08 10:03:13

Linq查詢Acces

2009-06-15 17:45:20

LINQ分組統計

2024-11-27 09:32:58

2011-08-18 10:03:57

NoSQL初創公司適用

2012-08-10 13:34:25

深信服應用交付負載均衡

2022-06-24 09:58:35

大數據JavaPython
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产一区二区三区久久狼黑人 | 日韩免费激情视频 | 日韩中文字幕一区二区 | 欧美中文一区 | av永久 | 在线不卡视频 | 色网站在线免费观看 | 天天操天天插天天干 | 日韩精品在线网站 | 国产色99精品9i | 国产精品久久久久久久久久三级 | 91精品国产一区二区在线观看 | 国产一区二区三区四区hd | 国产一区二区影院 | 国产精品特级毛片一区二区三区 | 极品国产视频 | 国产精品一区二区久久精品爱微奶 | 欧美激情欧美激情在线五月 | 亚洲精品中文在线 | www.色综合| 欧美一区二区免费 | 一区二区三区在线 | 亚洲综合在线网 | 久草青青 | 精品一区二区久久久久久久网精 | 天天干,夜夜操 | 国产不卡一区 | 有码一区 | 日韩三级免费观看 | 在线视频一区二区 | 日本一区二区在线视频 | 超碰在线人人 | 国产剧情一区 | 国产一区二区影院 | 亚洲欧洲日本国产 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 国产成人网| 综合久久久久久久 | 成人午夜精品一区二区三区 | 91精品国产日韩91久久久久久 | 中文字幕在线第一页 |