日期:2014-05-20  浏览次数:20672 次

linq直接执行 sql有没么坏处
为什么不都用linq直接执行sql。

 var query=from a in Plan           
           join c in Contract  on a.ID equlas c.ID           
           join d in ContractSub  on c.SupID equlas d.ID            
           where c.MType==3 && a.ID==aid           
           select d;   
           db.ContractSub.DeleteAllOnSubmit(query); 
           db.SubmitChanges(); 

这个批量删除的db是什么
需要添加 using (NorthwindDataContext dc = new NorthwindDataContext())这个吗

这个添加进去又说缺少引用命名空间。
希望得到详解  谢谢了
------解决方案--------------------
Plan Contract ContractSub
从哪里来的。
------解决方案--------------------
为什么不都用linq直接执行sql。
因为linq是和数据库无关的,而sql虽然说的统一的,但每个数据库都有自己的特定函数什么的
你一旦使用了sql就说明和某个数据库绑在一起了,当然我们做项目是很少换数据库的~
再说现在已经进入了DDD 领域驱动设计什么的 数据库也有nosql数据库,所以sql也许以后被淘汰吧
但现在,为了效率,非要用sql不可的时候,那就用吧

另外经验所以,最好不要物理删除,在表中添加一个IsDeleted字段什么的,来标记这条数据已经删除了就好


var query=from a in Plan           
           join c in Contract  on a.ID equlas c.ID           
           join d in ContractSub  on c.SupID equlas d.ID            
           where c.MType==3 && a.ID==aid           
           select d;   
           db.ContractSub.DeleteAllOnSubmit(query); 
           db.SubmitChanges(); 

这个批量删除的db是什么
query=符合条件的d(ContractSub) 所以是删除d




using (NorthwindDataContext dc = new NorthwindDataContext())

http://www.cnblogs.com/mecity/archive/2011/07/17/2108508.html
第四点
------解决方案--------------------
删除之后调用 SubmitChanges 
------解决方案--------------------
1. 这个批量删除的db是什么
是的

2. 需要添加 using (NorthwindDataContext dc = new NorthwindDataContext())这个吗
需要using

3. 这个添加进去又说缺少引用命名空间。
那你就添加引用命名空间,很正常呀
------解决方案--------------------
using System.Linq;
------解决方案--------------------
DeleteAllOnSubmit是linq to sql中的方法,EF中是不能用的。
ef中你可以用循环调用DeleteObject方法,或者把它做成一个扩展方法:
public static void DeleteObjects<TEntity>(this ObjectSet<TEntity> set, IEnumerable<TEntity> data) where TEntity : class
{
    foreach (var entity in data)
        set.DeleteObject(entity);
}