【发布时间】:2014-09-28 21:24:17
【问题描述】:
我是 VS C# 的初学者,正在处理我继承的 WINFORM 项目。 我需要在 tbl1 中找到 tbl2 中不存在的行并将其删除。加入列将是: tbl1==> "VistaFieldName" tbl2==> "FMFieldName"
我在 StackOverflow 链接 Get what exists in one DataTable but not another using LINQ 中发现了一些我认为可能有效的代码,但它使用的是 linq,我不熟悉 linq。
已编辑:尝试了链接中的查询语法,它有效,但现在我遇到了异常。如果我在第一个 foreach 循环中接受更改,我会得到“集合已修改”,如果我将接受更改放在 foreach 循环之外,我会收到异常“无法访问标记为删除的行”
我能做些什么来防止这种情况发生?
else if (dsVX130.Tables["tAttributes"].Rows.Count > 0)
{
var rowsOnlyIntblsAttributes = from r in tblsAttributes.AsEnumerable() //was dt1
//make sure there aren't any matching names in dt2
where !tbltAttributes.AsEnumerable().Any(r2 => r["VistaFieldNumber"].ToString().Trim().ToLower() == r2["FMFieldNumber"].ToString().Trim().ToLower())
select r;
DataTable result = rowsOnlyIntblsAttributes.CopyToDataTable();
//result.Rows[0]["VistaFieldNumber"]
string vresult;
foreach (DataRow dr in result.Rows)
{
vresult=result.Rows[0]["VistaFieldNumber"].ToString();
foreach (DataRow dr1 in tblsAttributes.Rows)
{
if (dr1["VistaFieldNumber"].ToString() == vresult)
{
dr1.Delete();
tblsAttributes.AcceptChanges();
}
}
}
tblsAttributes.AcceptChanges();
applyAttributes();
【问题讨论】:
-
LINQ is 语法,您可以在 Windows 窗体应用程序中使用。你在尝试这个时遇到了什么问题?
-
有什么理由选择 LINQ?除此之外使用起来很酷(哈哈)?
-
约翰,我发现了一个问题。我放了一个;在第一行的末尾,它不喜欢那样。删除之后,每个 Trim() 都说错误 1“对象”不包含“修剪”的定义,并且找不到接受“对象”类型的第一个参数的扩展方法“修剪”(您是否缺少使用指令还是程序集引用?)
-
coe4life,并不是我选择了它,而是寻找解决方案来做一些我不知道如何做的事情。
-
我在 .Trim() 之前添加了 ToString() 并清除了错误。我看看有没有。