1

寻找一种方法将以下 LinQ 写入实体查询作为 T-SQL 语句。

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

下面显然不正确,但我需要它来删除相应的 ProductShell 对象,其中任何 ShellMember 包含的 ProductID 等于传入的变量pid。我认为这将涉及一个连接语句来获取相关的 ShellMembers。

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

我为 FK_ShellMembers_ProductShell 外键启用了级联删除,因此当我删除 ProductShell 时,它将删除与其关联的所有 ShellMembers。我将把这个语句传递给 System.Data.EntityDatabase.ExecuteSqlCommand方法。

4

1 回答 1

1

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

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

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

也可以写成join

delete productshell
from productshell
join shellmembers on productshell.shellid=shellmembers.shellid
where shellmembers.productid={0}
于 2012-09-25T05:36:55.357 回答