2012-09-25 52 views
1

寻找一种将以下LinQ写入实体查询的方式作为T-SQL语句。通过与T-SQL查询的外键关系删除对象

repository.ProductShells.Where(x => x.ShellMembers.Any(sm => sm.ProductID == pid)).ToList().ForEach(x => repository.ProductShells.Remove(x)); 

以下显然是不正确的,但我需要它来删除相应的ProductShell对象,其中 任何ShellMember包含等于可变pid通过的产品ID。我认为这将涉及一个加入声明,以获得相关的壳牌成员。

repository.Database.ExecuteSqlCommand("FROM Shellmembers WHERE ProductID={0} DELETE FK_ProductShell", pid); 

我有级联删除的FK_ShellMembers_ProductShells外键启动,所以当我删除ProductShell它会删除与它相关联的所有ShellMembers。我将把这个声明传递给System.Data.Entity Database.ExecuteSqlCommand方法。

回答

1

您应该始终显示表结构和外键链接。 但是,它应该看起来像这样。

这假定两个表之间的链接是productshell.shellid = shellmembers.shellid

delete productshell 
where shellid in (
    select shellid 
    from shellmembers 
    where productid={0} 
    ) 

它也可以被写为一个连接

delete productshell 
from productshell 
join shellmembers on productshell.shellid=shellmembers.shellid 
where shellmembers.productid={0}