我对linq to sql很陌生,我不确定如何实际删除记录。
所以我一直在看本教程
http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx
所以他们有更新
NorthwindDataContext db = new NorthwindDataContext();
Product product = db.Products.Single(p => p.ProductName == "Toy 1");
product.UnitPrice == 99;
product.UnitsInStock = 5;
db.SubmitChanges();
对于删除,他们有
NorthwindDataContext db = new NorthwindDataContext();
var toyProducts = from p in db.Producsts
where p.ProductName.Contains("Toy")
select p;
db.Products.RemoveAll(toyProducts);
db.SubmitChanges();
所以我必须每次查询以获取记录才能删除该记录吗?就像我可以看到用update进行操作一样,因为您需要给它提供一条记录,该记录要先更新然后进行更改,以便我理解查询部分,但不能使用delete。
就像您不能仅发送您要删除的内容,然后删除它吗?为什么您必须首先获取它然后告诉它删除?
是不是数据库中有2个匹配项?
[此外,我还有要努力工作的外键关系。所以我有这个
public ViewResult(string param1, string param2)
{
Table A = new Table A
A.Field1 = param1;
A.Field2 = param2;
Delete(A);
}
private void Delete(Table A)
{
DbContext.A.DeleteAllOnsubmit(A.TableB);
DbContext.A.DeleteAllOnSubmit(A.TableC);
DbContext.A.DeleteOnSubmit(A);
}
因此失败,它显示此消息“无法删除尚未连接的实体。”
所以我可以看到为什么前两行在delete方法中会失败,因为我创建了一个新对象,而在包含有关TableB和TableC的任何信息的对象中它们什么也没有。
但是,即使另外两行不在那,我也看不到为什么最后一行仍然失败。
就像我认为它将如何工作一样,它将使用我传入的Table A类对象,并在表中查找其中包含的信息。似乎并非如此。
因此,我首先必须将信息取出,然后进行查询以获取信息,然后再将其删除,例如在示例中?
此外,removeAll()和说DeleteAllOnSubmit()之间有什么区别?
就像我说过的,我对sql的linq是陌生的,由于时间限制,我无法坐下来阅读有关它的书。一旦我有更多的时间,我可能会读一本书。
谢谢
您的一个问题中有几个问题,但是如果您已经有了主键,那么我将以最简单的方式开始,即附加。如果您没有主键,那么我总是会先执行提取操作,然后再执行删除操作,但是,每当执行提取操作时,我都会存储主键以进行更新和删除。
它将删除主键,但是如果有的话,请像下面一样附加并调用delete。我没有绕过DLINQ所需的对象,因为我想可以根据需要对其进行更改,因此我传递了一个不同的User对象,只是从业务类中提取PK并将其放入DAO类中。 >
var db = new MeatRequestDataContext();
if (input.UserID > 0)
{
entity = new User()
{
UserID = input.UserID
};
db.Users.Attach(entity);
db.Users.DeleteOnSubmit(entity);
}
Inserted_LINQDataContext db = new Inserted_LINQDataContext();
Item itm = new Item();
int ID = Convert.ToInt32(TextBox1.Text);
var DeleteID = from d in db.Items
where d.id == ID
select d;
db.Items.DeleteAllOnSubmit(DeleteID);
db.SubmitChanges();
Label2.Text = "Record deleted Successfully.";
TextBox1.Text = "";
这是通过linq查询从表中删除行的简单方法。可能有帮助。
SupportDataDataContext Retrive = new SupportDataDataContext();
// SupportDataDataContext delete = new SupportDataDataContext();
Topic res = Retrive.GetTable<Topic>().Single(t => t.ID == topicID);
if (res != null)
{
Retrive.Topics.DeleteOnSubmit(res);
Retrive.SubmitChanges(ConflictMode.ContinueOnConflict);
}
我知道这个问题很旧,但这可能对某人有用: