Linq To Sql經常使用方法使用總結

準備工做:數據表:Table1ID        int        PKCol1        varchar(50)Col2        int======================================Table2ID        int        PKoID        int        FKRemarks        varchar(50)======================================方法簡介:1.    查詢DBContext dc = new DBContext();              //實例化Linq To SQL 類var s = from t1 in dc.Table1    select t1;s就是表Table1中全部的集合若是須要返回Table1中的某幾列。var s = from t1 in dc.Table1    select new    {        t1.ID,        t1.Col1};        這樣就只返回ID列和Col1列。    若是要給返回的列指定別名,寫法以下:    var s = from t1 in dc.Table1    select new    {        myID = t1.ID,        myCol1 = t1.Col1};    這就至關於SQL語句中的 select ID as ‘myID’, Col1 as ‘myCol1’ from Table1。2.    帶條件查詢查詢Table1中Col1列的值等於 ABC的全部記錄DBContext dc = new DBContext();var s = from t1 in dc.Table1    where t1.Col1==」ABC」    //或者 where t1.Col1.Equals(「ABC」);模糊查詢用where t1.Col1. Contains (「ABC」) 至關於SQL語句中的 like ‘%ABC%’    select t1;還有一種更簡單的方法var s = dc.Table1.Where(u=>u.Col1.Equals(「ABC」));在vs2008中,已經將全部容器(數組)都封閉瞭如上方法。相似的還有var s = dc.Table1.First()    //取第一條數據var s = dc.Table1.Last()    //取最後一條數據可是這樣寫,必需注意異常處理。好比取第一條數據時,若是表Table1中根本就沒有任何數據,則該語句會直接出錯。因此要麼先判斷表中的數據條數,要麼加try…catch…進行處理。3.    數據總數DBContent dc = new DBContent();var s = from t1 in dc.Table1select new{    t1.ID    //爲了速度更快點,因此只返回一列};    s.Count();    //這裏就是數據總條數    還有一種更簡單的方法。    int totailNo = dc.Table1.Count();    //這裏的Count()裏面一樣能夠加條件(u=>u.Col1.Equals(「ABC」))。4.    兩表聯合查詢(及左連接)DBContent dc = new DBContent();var s = from t1 in dc.Table1    join t2 in dc.Table2    on t1.ID equals t2.oID          //注:用了join ,on後面必需用 equals    select new    {        T1.ID,        T1.Col1,        T2. Remarks    };左連接var s = from t1 in dc.Table1      join t2 in dc.Table2    on t1. ID equals t2.oID into tempTfrom t3 in tempT.DefaultIfEmpty()select ……Linq中的左鏈接(或右鏈接)就是使用DefaultIfEmpty()語法。可是使用DefaultIfEmpty()也須要用到into語法。如上例所示。在語句執行事後,t2是已經不存在了,由於它已經將數據轉移到tempT中了;而tempT也不存在了,一樣是由於經過DefaultIfEmpty()語法將數據轉移到t3中了。5.    Group by 語法var result = from t in dc.Table1        group t by t.ID into tempT    //這一步已經不存在 t 了 ,而 t 中的數據都到 tempT中了(數據是沒移動的)select new{   objID = tempT.Key,                myCol2 = ts.Max(p => p. Col2)};在Linq 中,使用group by ,就必需使用into(也就是將group by 之後的數據放到一個新的容器中)。另外,值得注意的是,例子中的 objID= tempT.Key。這裏也能夠看出。是使用的tempT,而不是t,說明經過group by…into… 已經將查詢出來的結果放進了tempT中。而tempT.Key就是 group by 後面的t.ID。6.    分頁var s = from t1 in c.tbTests    order by t1.ID    //分頁都須要用到order by ,還將可能引發返回的數據不許確    select new    {              myID = t1.ID,              myCol1 = t1.Col1,        };    GridView1.DataSource = s.Skip(startRowIndex).Take(rowCount);GridView1.DataBind();startRowIndex:當前數據頁數的第一條數據rowCount:每頁顯示的數據條數好比:頁數用 pageIndex表示。當前是第一頁,(pageIndex=0; startRowIndex=0)每頁顯示20條數據,(rowCount=20)那麼咱們顯示下一頁數據時,pageIndex=1;startRowIndex就應該是20(startRowIndex * RowCount)7.    多條件動態查詢首先得寫一個類(用於加載動態條件的)    /// <summary>    /// 生成多條件動態查詢的條件結構 : AND用true ; OR用false    /// </summary>    public static class PredicateExtensions    {        public static Expression<Func<T, bool>> True<T>() { return f => true; }        public static Expression<Func<T, bool>> False<T>() { return f => false; }        public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)        {            var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());            return Expression.Lambda<Func<T, bool>>(Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);        }        public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)        {            var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());            return Expression.Lambda<Func<T, bool>>(Expression.And(expr1.Body, invokedExpr), expr1.Parameters);        }}上面這部分是一個老外寫的,嘿嘿下面進行動態查詢var searchPredicate1 = PredicateExtensions.True<Table1>();  string col1 = textBox1.Text;int col2 = int.Prase(textBox2.Text);if (!string.IsNullOrEmpty(col1)){        searchPredicate1 = searchPredicate1.And(u => u.Col1.Contains(col1));  }if(col2 != 0){    searchPredicate1 = searchPredicate1.And(u => u.Col2.Equals(col2));  }    DBContent dc = new DBContent();    var s = from t1 in dc.Table1.Where(searchPredicate1)        select t1;8.    查詢出來的數據再查詢DBContent dc = new DBContent();var s1 = from t1 in dc.Table1select t1;    var q = from t1 in dc.Table2        join t2 in s1          //這裏是將查詢的數據 s 再進行查詢        on t1.oID equals t2.ID        select ……9.    外部數據做中條件檢索int[] col2List = new int[5] {1,2,3,4,5};DBContent dc = new DBContent();var s1 = from t1 in dc.Table1.Where(u=>col2List.Contains(u.Col2))    //查詢列Col2的值包含在col2List中的數據(和 in 語法差很少)select t1;
相關文章
相關標籤/搜索