代码改变世界

Linq使用介绍及注意事项

2014-04-17 15:03  hduhans  阅读(214)  评论(0)    收藏  举报

  LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。

  工具:LinqPad(http://www.linqpad.net/)分析工具

 一、使用方法

1、返回匿名类型

   var sql = from c in tb select new {c.EUserName,c.AreaName}
   var sql = from c in tb select new {EUserName:c.EUserName,AreaDepName:c.AreaName +c.DeaprtName}; 

2、事务处理,见如下代码:

if (_dataContext.Connection != null) _dataContext.Connection.Open();
DbTransaction tran = _dataContext.Connection.BeginTransaction();
_dataContext.Transaction = tran;

try {
    //p1插入成功
    Person p1 = new Person() { id = 100, name = "hans" };
    _dataContext.GetTable<Person>().InsertOnSubmit(p1);
    _dataContext.SubmitChanges();

    //p2.id=101已存在,插入不成功,通过事务处理,会将p1插入操作回滚,插入失效
    Person p2 = new Person() { id = 101, name = "hdu" };
    _dataContext.GetTable<Person>().InsertOnSubmit(p2);
    _dataContext.SubmitChanges();

    tran.Commit();
} catch (Exception ex) {
    tran.Rollback();
}
View Code

 

二、优化建议

1、筛选需要的字段(与选择全部字段相比,效率相差好几倍)。

   var sql = from c in tb select new { EUserName:c.EUserName,AreaDepName:c.AreaName +c.DeaprtName};

2、多次循环查询_dataContext.GetTable<FS_Employee>时,将table事先序列化成List,避免每次去读取数据库。

3、考虑是否可以省去ToList,这个过程非常耗费时间。

4、经上述优化,查询仍然非常慢,可考虑使用并行查询。

   var sql = from c in tb.AsParallel() select new { EUserName:c.EUserName,AreaDepName:c.AreaName +c.DeaprtName};