我一直在使用LINQ To SQL一段时间,当涉及从数据库中删除实体时,我总是调用表的.DeleteOnSubmit并传入实体.有时我发现自己写了类似的东西:
db.Users.DeleteOnSubmit(db.Users.Where(c => c.ID == xyz).Select(c => c).Single());
这当然会导致两个查询.一个用于获取符合条件的实体,另一个用于删除它.通常我有我需要删除的记录的ID,我想知道是否有更直接的方法通过ID从表中删除行?
这是一个解决方案......
public static void DeleteByPK(TPK pk, DataContext dc) where TSource : class { Table table = dc.GetTable (); TableDef tableDef = GetTableDef (); dc.ExecuteCommand("DELETE FROM [" + tableDef.TableName + "] WHERE [" = tableDef.PKFieldName + "] = {0}", pk); }
这不是我的代码!请参阅解释 - http://msmvps.com/blogs/omar/archive/2008/10/30/linq-to-sql-delete-an-entity-using-primary-key-only.aspx
希望这可以帮助.
通过附加部分对象并删除它,无需手动工具SQL即可执行此操作:
var myEntity = new MyEntityType { MyEntityId = xxx }; Context.MyEntityTypeTable.Attach(myEntity, false); Context.MyEntityTypeTable.DeleteOnSubmit(myEntity); Context.SubmitChanges();
简单.您甚至可以将其作为扩展方法编写,并使用动态对象类型来表示键,并使用反射来确定关键属性,我将留给读者作为有趣的练习.例如实现Context.Delete(new {MyEntityId = xxx});