C# 在LINQ中附加新创建的元素以删除
我有一个网格和数据集对象与之连接。 数据层与LINQ一起工作。所以我需要从LINQ数据源中删除网格中删除的元素 我有一个将我的DataRow项转换为LINQ项的方法。例如:C# 在LINQ中附加新创建的元素以删除,c#,.net,linq,linq-to-sql,ado.net,C#,.net,Linq,Linq To Sql,Ado.net,我有一个网格和数据集对象与之连接。 数据层与LINQ一起工作。所以我需要从LINQ数据源中删除网格中删除的元素 我有一个将我的DataRow项转换为LINQ项的方法。例如: DataRow forDelete = ...; LinqItem itemForDelete = ConvertFromDataRow(forDelete); dataContext.DeleteOnSubmit(itemForDelete); 此代码引发异常,无法删除未附加到表的项。 但是如果我把它改成 DataRow
DataRow forDelete = ...;
LinqItem itemForDelete = ConvertFromDataRow(forDelete);
dataContext.DeleteOnSubmit(itemForDelete);
此代码引发异常,无法删除未附加到表的项。
但是如果我把它改成
DataRow forDelete = ...;
LinqItem itemForDelete = ConvertFromDataRow(forDelete);
dataContext.Attach(itemForDelete)
dataContext.DeleteOnSubmit(itemForDelete);
然后它会抛出一个异常,即无法附加已经存在的项
问题是在这种情况下如何正确地附加项目。这应该可以解决问题。异常是因为您试图删除未跟踪的项目 在DeleteOnSubmit之前按Id查找 更多信息: 及
看起来这个问题没有正确的答案,也没有办法满足我的需要。你有没有试着找到LinqItem,然后删除它。。。比如
var object=dataContext.xxx.Where(x=>x.ItemId==itemForDelete.ItemId)
然后dataContext.deleteoSubmit(对象)代码>是的,这种方法有效,但在目前的情况下,我不能使用它。因为我有泛型方法和很多遗留代码。所以我无法按Id找到元素,因为Linq不知道我的元素有一个Id字段。我不能从有该字段的item继承它,因为大量的遗留代码很难维护,因为所有的项都是自动生成的,并且有一点不同的结构。此外,我尝试使用dynamc表达式解决它,并在循环中搜索该元素,但这种方法的性能非常差。让数据库对象与实际数据库不同步似乎是个坏主意……您确实应该更新项目以反映该表包含的内容……您没有仔细阅读我的问题。我使用通用方法,无法按ID选择项,因为我的方法不知道该项目有和ID。它不可能;由于遗留代码的数量很大,所以所有元素都有一个通用的基类。