2012-09-25 101 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}