1

次の LinQ to entities クエリを T-SQL ステートメントとして記述する方法を探しています。

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

以下は明らかに正しくありませんが、変数に渡されたものと等しい ProductID が ShellMember に含まれているそれぞれの ProductShell オブジェクトを削除する必要がありますpid。これには、関連する ShellMembers を取得するための結合ステートメントが含まれると思います。

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

FK_ShellMembers_ProductShells 外部キーに対してカスケード削除を有効にしているため、ProductShell を削除すると、関連付けられているすべての ShellMembers が削除されます。このステートメントを System.Data.EntityDatabase.ExecuteSqlCommandメソッドに渡します。

4

1 に答える 1

1

テーブル構造と外部キー リンケージを常に表示する必要があります。ただし、次のようになります。

これは、2 つのテーブル間のリンクが 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}
于 2012-09-25T05:36:55.357 に答える