【发布时间】:2012-10-26 13:23:57
【问题描述】:
我有一个与之连接的网格和数据集对象。 和使用 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);
它会抛出无法附加已存在的项目的异常。
问题是在这种情况下如何正确附加物品。这应该可以解决问题。
【问题讨论】:
-
您是否尝试过查找 LinqItem,然后将其删除...例如
var object = dataContext.xxx.Where(x => x.ItemId == itemForDelete.ItemId);然后dataContext.DeleteOnSubmit(object); -
是的,这种方法有效,但在目前的情况下我不能使用它。因为我有通用方法和很多遗留代码。所以我无法通过 Id 找到元素,因为 Linq 不知道我的元素有一个 ID 字段。而且我不能从具有该字段的项目中继承它,因为有大量遗留代码,这将很难维护,因为所有项目都是自动生成的并且具有一些不同的结构。
-
另外,我尝试使用动态表达式解决它并在循环中搜索该元素,但这种方法的性能非常差。
-
让您的数据库对象与您的实际数据库不同步似乎是个坏主意...您确实应该更新项目以实际反映该表包含的内容...
-
你没有仔细阅读我的问题。
标签: c# .net linq linq-to-sql ado.net