寻找一种方法将以下LinQ编写为实体查询作为T-SQL语句。
repository.ProductShells.Where(x => x.ShellMembers.Any(sm => sm.ProductID == pid)).ToList().ForEach(x => repository.ProductShells.Remove(x));
下面显然不正确,但我需要删除相应的ProductShell对象
任何ShellMember都包含一个等于传入变量pid
的ProductID。我认为这将涉及一个连接语句来获取相关的ShellMembers。
repository.Database.ExecuteSqlCommand("FROM Shellmembers WHERE ProductID={0} DELETE FK_ProductShell", pid);
我为FK_ShellMembers_ProductShells外键启用了级联删除,因此当我删除ProductShell时,它将删除与之关联的所有ShellMembers。我将把这个语句传递给System.Data.Entity Database.ExecuteSqlCommand
方法。
答案 0 :(得分: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}