2012-02-16 88 views
-2

当我使用 var select = from st in context.student where st.college ==“ABC” select st;'删除操作使用linq

context.student.DeleteAllonSubmit(select); context.student.SubmitChanges();

如果有10条包含大学名称的记录作为“ABC”,则会启动10条删除查询。

+1

可能的重复http://stackoverflow.com/questions/445033/use-linq-to-generate-direct-update-without-select – 2012-02-16 11:59:16

+0

但是,选择查询触发的确切原因仍未清除。我们如何避免使用Linq更新和删除查询中的select语句 – Piyush 2012-02-16 12:06:12

+0

我认为,因为答案是这样的 - LINQ或LINQ to SQL都具有基于集合的更新功能。第二个“答案”提供了一个解决方法。但看看是否有其他人有任何补充。我很有兴趣 – 2012-02-16 12:08:56

回答

1

那么我唯一的解释是,Linq首先必须选择你想要更新/删除的行。知道哪些行受到更新/删除的影响后,Linq会创建最充分的查询来更新/删除所需的行并执行它。

如果我错了,请纠正我,这是我认为正在发生的事情,我不知道它是肯定的。

+0

那么实际发生的是以下几点。当你创建一个对象时,实体框架使用你的edmx文件(或者处理从数据库到对象的转换的另一个文件)从数据库中创建对象。这些对象与您的数据库不同步。所以,当你从对象上下文中删除/更新对象,并且你说要保存对象上下文时,实体框架会将你的对象与数据库中的对象(也使用edmx(或其他))进行比较。然后,实体框架根据您的更改更新数据库(使用最佳查询)。 – 2012-02-16 12:26:02

+0

很高兴帮助(不要忘记投票:))。我建议打开你的对象上下文做一个Linq查询,删除你想要删除的所有行。然后保存更改并关闭对象上下文(您应该使用using语句,但这是另一回事)。 Linq应该很聪明,它可以在单个查询中检测到它是可能的。你做到了,Linq可以做到几乎一样。然后,你所要做的就是信任Linq icm实体框架执行正确的查询。你也可以在SQL Server 2008中监视发送查询。 – 2012-02-16 12:44:49

+0

你可以发布你正在做的Linq查询吗?也许弄清楚这10个查询究竟是什么?表扫描表寻求ect – 2012-02-17 08:28:32