知识大全 Linq To Sql常用方法使用总结

Posted 语法

篇首语:人不能象走兽那样活着,应该追求知识和美德。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Linq To Sql常用方法使用总结相关的知识,希望对你有一定的参考价值。

Linq To Sql常用方法使用总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  准备工作

  数据表

  Table

  ID        int        PK

  Col         varchar( )

  Col         int

  ======================================

  Table

  ID        int        PK

  oID        int        FK

  Remarks        varchar( )

  ======================================

  方法简介

       查询

  DBContext dc = new DBContext();              //实例化Linq To SQL 类

  var s = from t in dc Table

  select t ;

  s就是表Table 中所有的集合

  如果需要返回Table 中的某几列

  var s = from t in dc Table

  select new

  

  t ID

  t Col

  ;

  这样就只返回ID列和Col 列

  如果要给返回的列指定别名 写法如下

  var s = from t in dc Table

  select new

  

  myID = t ID

  myCol = t Col

  ;

  这就相当于SQL语句中的 select ID as myID Col as myCol from Table

       带条件查询

  查询Table 中Col 列的值等于 ABC的所有记录

  DBContext dc = new DBContext();

  var s = from t in dc Table

  where t Col == ABC     //或者 where t Col Equals( ABC ) 模糊查询用where t Col Contains ( ABC ) 相当于SQL语句中的 like %ABC%

  select t ;

  还有一种更简单的方法

  var s = dc Table Where(u=>u Col Equals( ABC ));

  在vs 中 已经将所有容器(数组)都封闭了如上方法 类似的还有

  var s = dc Table First()    //取第一条数据

  var s = dc Table Last()    //取最后一条数据

  但是这样写 必需注意异常处理 比如取第一条数据时 如果表Table 中根本就没有任何数据 则该语句会直接出错

  所以要么先判断表中的数据条数 要么加try…catch…进行处理

       数据总数

  DBContent dc = new DBContent();

  var s = from t in dc Table

  select new

  

  t ID    //为了速度更快点 所以只返回一列

  ;

  s Count();    //这里就是数据总条数

  还有一种更简单的方法

  int totailNo = dc Table Count();    //这里的Count()里面同样可以加条件(u=>u Col Equals( ABC ))

       两表联合查询(及左链接)

  DBContent dc = new DBContent();

  var s = from t in dc Table

  join t in dc Table

  on t ID equals t oID          //注 用了join on后面必需用 equals

  select new

  

  T ID

  T Col

  T Remarks

  ;

  左链接

  var s = from t in dc Table

  join t in dc Table

  on t ID equals t oID into tempT

  from t in tempT DefaultIfEmpty()

  select ……

  Linq中的左连接(或右连接)就是使用DefaultIfEmpty()语法 但是使用DefaultIfEmpty()也需要用到into语法 如上例所示 在语句执行过后 t 是已经不存在了 因为它已经将数据转移到tempT中了 而tempT也不存在了 同样是因为通过DefaultIfEmpty()语法将数据转移到t 中了

       Group by 语法

  var result = from t in dc Table

  group t by t ID into tempT    //这一步已经不存在 t 了 而 t 中的数据都到 tempT中了(数据是没移动的)

  select new

  

  objID = tempT Key

  myCol = ts Max(p => p Col )

  ;

  在Linq 中 使用group by 就必需使用into(也就是将group by 以后的数据放到一个新的容器中) 另外 值得注意的是 例子中的 objID= tempT Key 这里也可以看出 是使用的tempT 而不是t 说明通过group by…into… 已经将查询出来的结果放进了tempT中 而tempT Key就是 group by 后面的t ID

       分页

  var s = from t in c tbTests

  order by t ID    //分页都需要用到order by 还将可能引起返回的数据不准确

  select new

  

  myID = t ID

  myCol = t Col

  ;

  GridView DataSource = s Skip(startRowIndex) Take(rowCount);

  GridView DataBind();

  startRowIndex 当前数据页数的第一条数据

  rowCount:每页显示的数据条数

  比如

  页数用 pageIndex表示

  当前是第一页 (pageIndex= ; startRowIndex= )

  每页显示 条数据 (rowCount= )

  那么我们显示下一页数据时 pageIndex= ;startRowIndex就应该是 (startRowIndex * RowCount)

       多条件动态查询

  首先得写一个类(用于加载动态条件的)

  /// <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>> expr Expression<Func<T bool>> expr )

  

  var invokedExpr = Expression Invoke(expr expr Parameters Cast<Expression>());

  return Expression Lambda<Func<T bool>>(Expression Or(expr Body invokedExpr) expr Parameters);

  

  public static Expression<Func<T bool>> And<T>(this Expression<Func<T bool>> expr Expression<Func<T bool>> expr )

  

  var invokedExpr = Expression Invoke(expr expr Parameters Cast<Expression>());

  return Expression Lambda<Func<T bool>>(Expression And(expr Body invokedExpr) expr Parameters);

  

  

  上面这部分是一个老外写的 嘿嘿

  下面进行动态查询

  var searchPredicate = PredicateExtensions True<Table >();

  string col = textBox Text;

  int col = int Prase(textBox Text);

  if (!string IsNullOrEmpty(col ))

  

  searchPredicate = searchPredicate And(u => u Col Contains(col ));

  

  if(col != )

  

  searchPredicate = searchPredicate And(u => u Col Equals(col ));

  

  DBContent dc = new DBContent();

  var s = from t in dc Table Where(searchPredicate )

  select t ;

       查询出来的数据再查询

  DBContent dc = new DBContent();

  var s = from t in dc Table

  select t ;

  var q = from t in dc Table

  join t in s           //这里是将查询的数据 s 再进行查询

  on t oID equals t ID

  select ……

       外部数据作中条件检索

  int[] col List = new int[ ] ;

  DBContent dc = new DBContent();

  var s = from t in dc Table Where(u=>col List Contains(u Col ))    //查询列Col 的值包含在col List中的数据(和 in 语法差不多)

cha138/Article/program/net/201311/11336

相关参考

知识大全 ASP.NET中显示Linq To SQL输出的SQL语句

ASP.NET中显示LinqToSQL输出的SQL语句  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 LINQ to SQL语句之Insert/Update/Delete操作

LINQtoSQL语句之Insert/Update/Delete操作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 Linq to DataSet 之Access查询

LinqtoDataSet之Access查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Linq

知识大全 LINQ 实现常见SQL查询

LINQ实现常见SQL查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Top查询skip(i

知识大全 总结--常用的监控SQL语句集合

总结--常用的监控SQL语句集合  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  监控事例的等待:

知识大全 DB2比较常用与实用sql语句总结

DB2比较常用与实用sql语句总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!1、查找员工的编号

知识大全 110个oracle常用函数总结(8)

  RATIO_TO_REPORT功能描述该函数计算expression/(sum(expression))的值它给出相对于总数的百分比即当前行对sum(expression)的贡献  SAMPLE下

知识大全 110个oracle常用函数总结(2)

  返回一个数字反余弦值  SQL>selectcosh()fromdual;  COSH()      EXP  返回一个数字e的n次方根  SQL>selectexp()exp()fr

知识大全 110个oracle常用函数总结(1)

  ASCII  返回与指定的字符对应的十进制数;  SQL>selectascii(A)Aascii(a)aascii()zeroascii()spacefromdual;  AAZEROSP

知识大全 关于日期的sql 做报表的时候可能有用

  得到年月日季度    select  to_char(日期yyyymmdd)DATE_IDto_char(日期yyyy)||年||to_char(日期mm)||月||to_char(日期dd)||