1. 程式人生 > >FineUI LINQ TO SQL 資料庫分頁查詢

FineUI LINQ TO SQL 資料庫分頁查詢

環境:

VS2010 , ASP web Forms , FineUI 4.2.3, LINQ TO SQL

要實現如下的查詢,使用資料庫分頁,一次只查詢介面需要的資料。

FineUI的定義:

<f:Grid ID="Grid1" ShowBorder="false" PageSize="15" AllowPaging="true" IsDatabasePaging="true"
                OnPageIndexChange="Grid1_PageIndexChange" ForceFit="true" ShowHeader="false"
                runat="server" EnableCollapse="true" DataKeyNames="Guid">
                <Columns>
                    <f:BoundField DataField="BOXBARCODE" HeaderText="包裝箱條碼" MinWidth="100px" />
                    <f:BoundField DataField="SCANDATE" HeaderText="日期" DataFormatString="{0:yyyy.MM.dd HH:mm:ss}" />
                    <f:BoundField DataField="LGORT" HeaderText="地點" />
                    <f:BoundField DataField="MATNR" HeaderText="物料" />
                    <f:BoundField DataField="LIFNR" HeaderText="供應商" />
                    <f:BoundField DataField="MENGE" HeaderText="數量" />
                    <f:BoundField DataField="WERKS" HeaderText="工廠" />
                    <f:BoundField DataField="ISGW" HeaderText="歸位" />
                </Columns>
            </f:Grid>

ASP頁面關鍵程式碼:

        DataTable dt = new DataTable();
        linq.DataClasses_GRDataContext db = new linq.DataClasses_GRDataContext();// 需要匯出XLS,所以定義為全域性變數

  var query = from c in db.GR
                                     where
                                         (
                                         (c.ASN.Contains(TextBox1.Text) || string.IsNullOrEmpty(TextBox1.Text.Trim())) &&
                                         (c.MATNR.Contains(TextBox2.Text) || string.IsNullOrEmpty(TextBox2.Text.Trim())) &&
                                         (c.LIFNR.Contains(TextBox3.Text) || string.IsNullOrEmpty(TextBox3.Text.Trim())) &&
                                         (c.SCANDATE.Value.Date.Equals(DatePicker1.SelectedDate) || string.IsNullOrEmpty(DatePicker1.Text.Trim()))
                                         )
                                     select c;
            

            // 1.控制元件設定總項數(特別注意:資料庫分頁一定要設定滿足條件的總記錄數RecordCount)
            Grid1.RecordCount = query.Count();

            // 2.獲取當前分頁資料
            var q = query.Skip(Grid1.PageIndex * Grid1.PageSize).Take(Grid1.PageSize);

            dt = mytools.ListToDataTable(q.ToList());

            // 3.繫結到Grid
            Grid1.DataSource = dt;
            Grid1.DataBind();       

看一下LINQ產生的SQL,第一個是count,第二個是15條資料

SELECT COUNT(*) AS [value]
FROM [dbo].[GR] AS [t0]
WHERE ([t0].[ASN] LIKE @p0) AND ([t0].[MATNR] LIKE @p1)
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [%5500005836%]
-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [%10005731%]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.18408

SELECT [t1].[ID], [t1].[ASN], [t1].[LGORT], [t1].[TXTID], [t1].[MATNR], [t1].[LIFNR], [t1].[MENGE], [t1].[WERKS], [t1].[BOXBARCODE], [t1].[SCANDATE], [t1].[ISGW]
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY [t0].[ID], [t0].[ASN], [t0].[LGORT], [t0].[TXTID], [t0].[MATNR], [t0].[LIFNR], [t0].[MENGE], [t0].[WERKS], [t0].[BOXBARCODE], [t0].[SCANDATE], [t0].[ISGW]) AS [ROW_NUMBER], [t0].[ID], [t0].[ASN], [t0].[LGORT], [t0].[TXTID], [t0].[MATNR], [t0].[LIFNR], [t0].[MENGE], [t0].[WERKS], [t0].[BOXBARCODE], [t0].[SCANDATE], [t0].[ISGW]
    FROM [dbo].[GR] AS [t0]
    WHERE ([t0].[ASN] LIKE @p0) AND ([t0].[MATNR] LIKE @p1)
    ) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p2 + 1 AND @p2 + @p3
ORDER BY [t1].[ROW_NUMBER]
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [%5500005836%]
-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [%10005731%]
-- @p2: Input Int (Size = -1; Prec = 0; Scale = 0) [0]
-- @p3: Input Int (Size = -1; Prec = 0; Scale = 0) [15]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.18408

這三行程式碼,可以檢視LINQ的SQL語句。

 #if DEBUG
                db.Log = new  DebugTextWriter(); //該類在mytools檔案中
            #endif

注意SCANDATE欄位,在資料庫中是Datetime型別,FineUI中DatePicker日期控制元件用SelectedDate屬性取到Datetime型別的變數。

 

相關推薦

FineUI LINQ TO SQL 資料庫查詢

環境: VS2010 , ASP web Forms , FineUI 4.2.3, LINQ TO SQL 要實現如下的查詢,使用資料庫分頁,一次只查詢介面需要的資料。 FineUI的定義: <f:Grid ID="Grid1" ShowBorder="fals

各種資料庫查詢sql

1.oracle資料庫分頁 select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>

各種資料庫查詢sql語句大全

在顯示記錄條目時往往要用到分頁,一種常用的辦法是利用各種資料庫自帶的定位介面對原始查詢語句進行改寫,從而只取出特定範圍的某些記錄。不同的資料庫,查詢定位介面是不一樣的,下面做一彙總:  資料庫  分頁查詢語句  說明  MySQL    "QUERY_SQL

Linq to SQL 的連表查詢(轉)

equal query 交集 數據庫 調用 數據 變量 bst log 關於數據庫的查詢中經常需要用到多表的連接查詢,這裏就簡單地展示關於linq的查詢功能。 1、單表的查詢 [csharp] view plain copy var query = from

動態sql實現查詢

類對象 span ecp IT clas listitem 結果 創建 sku 1.創建實體類對象需要查詢的條件com.rl.ecps.model.QueryCondition   private Long brandId;   private Short auditSta

資料庫查詢(非DAO層框架所支援查詢)

oracle資料庫: SELECT * FROM (SELECT ROWNUM AS rowno, t.* FROM emp t WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd'

常見資料庫查詢語句

 附:常見資料庫分頁查詢語句 1.oracle資料庫分頁 select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>=startrow 2.DB2資料庫分頁

Oracle資料庫查詢語句與優化

回顧了之前做的專案,看到查詢分頁功能,發現有可以優化的地方。 總的來說優化過程有三個階段: 一、 select * from (select A.*, rownum rn from (select * from table_name)A) where

Oracle SQL實現查詢

Oracle SQL分頁查詢 1、表結構 SQL> desc test;

JPA原生SQL(自定義SQL查詢邏輯

JPA自己寫SQL查詢的話,分頁還稍微麻煩,經過測試下面方法可以: @Query(nativeQuery = true, value = "select * from goods where " +

Java web訪問MySql資料庫查詢

有時候我們查詢資料庫表時,但是很多時候表中的記錄很多,需要顯示出來的話怎麼辦?這時可以使用分頁的方法,就是指定從資料庫表的什麼位置開始查詢顯示,以及指定顯示的記錄數目。 Mysql資料庫提供了limit a,b的關鍵字,a是資料庫表的查詢起始位置,是個偏移量,b是指定本次查

SQLite基本操作加資料庫查詢

     先進行簡單的資料操作.然後在資料庫上面做分頁查詢的操作,也就是listview分頁.看程式碼 MySQLiteOpenHelper類,繼承SQLiteOpenHelper類,是android中操作資料庫的輔助類 package zuoyeSQLlite.hall;

Linq to SQL中的模糊查詢

一、 query = from c in tbs where c.sx != "類別" && c.path_tbname.Contains(tName.Text) orderby c.id se

[筆記]Oracle、MySQL和DB2資料庫查詢的實現

1.Oracle分頁查詢 SELECT * FROM (        SELECT tt.*,ROWNUM AS rowno                 FROM (                     SELECT t.info_id,t.title,t.sou

linq to sql 多條件組合查詢

//一個條件一個條件串接 using System.Linq.Expressions; Expression<Func> exps = A => true; if (GroupId != "0") { Expression<Func>

使用MyBatis(12)動態SQL 完成查詢

修改動態SQL加上limit 1.和上一篇一樣Student類不變 2.建立多條件查詢的類 package com.yw.test12; public class Condition {

Oracle、Mysql資料庫查詢歸納

Oracle 分頁查詢 Oracle分頁需要用到rownum偽類,和rowid記錄實體地址不同,他會根據返回的記錄生成一個序列化數字,利用rownum可以實現一些原先難以實現的結果輸出 1. 取出查詢結果前幾條資料 select * from ta

oracle 查詢sql server 查詢sql語句

oracle: SELECT * FROM ( SELECT TEMP.* ,ROWNUM RN FROM ( 表) TEMP WHERE ROWNUM <=currentPage * perPageRows ) WHERE RN >  (currentPage

Android—SQlite資料庫提高篇之資料庫查詢

 根據此方法來確定資料庫總資料可以最多分幾頁進行查詢 引數:page_size:是一頁查詢資料的數量 type,vid:是查詢資料庫的條件,根據這些條件查詢來確定資料庫中查詢資料的總數。 private int getMaxPageSize(int page_size,St

Sql Server 查詢

     記得在做牛腩新聞釋出系統的時候就做過分頁查詢,分頁查詢在查詢語句中起到了很大的作用,它能提高查詢效率,寫好了也能簡化程式碼。現在我簡單介紹一下Sql Server中的分頁查詢。      具