2010-11-03 74 views
0

我有一個存儲「標籤」像這樣的表:LINQ到SQL - 刪除多對多如果沒有關係

ProductTags 
    TagID  PK   
    Name  nvarchar(50) [not null] 

和M2M映射表是這樣的:

ProductTagMap 
    ProductID PK 
    TagID  PK 

現在,讓我們說我從一個產品刪除標記的關係(或全部),像這樣:

// get our Product we are working on... 
Product product = dataContext.Products.Where(p > p.ProductID = 1); 

// this remove the link between the product and its tags 
dataContext.ProductTagMaps.DeleteAllOnSubmit(product.ProductTagMaps); 

//*** If these product-specific Tag/s is/are no longer used ***/ 
//*** by any other Products I'd like to delete them   ***/ 
//*** How can this be done here?       ***/ 

dataContext.SubmitChanges(); 

如果這些標籤(與特定產品相關)不再與我希望它們刪除的任何產品相關。 如何在上面的代碼中完成(請參閱評論)?

回答

1

,因爲這將需要檢查的其他記錄其他映射,你必須做一個查詢來檢查孤兒:

var tags = from t in dataContext.Tags 
    where t.ProductTags.Count() == 0 
    select t; 
dataContext.Tags.DeleteAllOnSubmit(tags); 

這給你,你可以刪除標籤。