Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在LINQ中附加新创建的元素以删除_C#_.net_Linq_Linq To Sql_Ado.net - Fatal编程技术网

C# 在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

我有一个网格和数据集对象与之连接。 数据层与LINQ一起工作。所以我需要从LINQ数据源中删除网格中删除的元素

我有一个将我的DataRow项转换为LINQ项的方法。例如:

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。它不可能;由于遗留代码的数量很大,所以所有元素都有一个通用的基类。