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;
相关文章
相关标签/搜索