LINQ to SQL - 如果没有关系,删除多对多

时间:2010-11-03 19:34:50

标签: c# asp.net linq linq-to-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 个答案:

答案 0 :(得分:1)

由于这需要检查其他记录中的其他映射,您必须进行查询以检查孤儿:

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

这为您提供了可以删除的标签。