我有一个包含三个表的数据集。我想将一个表中的列项与另外两个列中的列项进行比较,但为了实现这一点,我使用的是嵌套的foreach循环。代码返回的方式比应该的数据多,所以我有一种感觉,我搞砸了一些东西;我也确定有更好/更清洁的方法来做到这一点,请随时告诉我。
foreach (DataRow row in dataSet.Tables["Taxonomy"].Rows)
{
var projectTypes = row["ProjectType"].ToString();
var tier3 = row["Tier3Project"].ToString();
if (tier3.Equals(""))
tier3 = "null";
Console.WriteLine(projectTypes);
foreach (DataRow dRow in dataSet.Tables["DefaultEventTypes"].Rows)
{
var name = dRow["name"].ToString();
if (name.Equals(""))
name = "null";
/****** Begin Comparisons ******/
if (projectTypes.Trim().ToLower().Equals(name.Trim().ToLower()))
{
foreach (DataRow sRow in dataSet.Tables["ScheduleEvents"].Rows)
{
var nameShort = sRow["nameShort"].ToString();
/****** Compare to ScheduleEvent ******/
if (projectTypes.Trim().ToLower().Equals(nameShort.Trim().ToLower()))
{
//Update both DefaultEventType and ScheduleEvent
Console.WriteLine(projectTypes + " " + name + " " + tier3);
counter++;
}
else
{
}
}
}
else
{
foreach (DataRow sRow in dataSet.Tables["ScheduleEvents"].Rows)
{
var nameShort = sRow["nameShort"].ToString();
/****** Compare to ScheduleEvent ******/
if (projectTypes.Trim().ToLower().Equals(nameShort.Trim().ToLower()))
{
//Update ScheduleEvent
}
}
}
/****** End Comparisons ******/
}
}
如果需要我可以澄清,谢谢!
编辑:
我想从表格“分类法”中提取一个项目'然后将其与表格中的每一行进行比较' DefaultEventTypes'。如果有匹配,那么我想比较“分类法”和“分类法”。项目到' ScheduleEvent'中的每一行。
最终我想添加更新语句以将匹配项更改为新名称,并将表保存回数据库。
它似乎正在进行比较,但它返回的值的数量太大了。
答案 0 :(得分:2)
dataSet.Tables["Table1"].AsEnumerable().Select(r => r.Field<string>("Field1")).Intersect(
dataSet.Tables["Table2"].AsEnumerable().Select(r => r.Field<string>("Field2"))).Intersect(
dataSet.Tables["Table3"].AsEnumerable().Select(r => r.Field<string>("Field3")));
这样的事情......虽然
,但没有对此进行测试PS:这应该返回一组值,这些值存在于各列的所有3个表中。
回答评论: 好吧,你有足够的信息来更新你想要的东西。
var valuesThatRepeat = GetWhatYouNeedUsingCodeAbove();
foreach (var value in valuesThatRepeat)
{
var rows = dataSet.Tables["Table2"].AsEnumerable().Where(r => ((string)r["Column2"]).Equals(value));
foreach(var row in rows)
{
row["Column2"] = (string)r["Column2"] + "of_row_with_id_" + (string)r["Id"]; // update the value with whatever you want
}
}
此示例将更新第二个表中的所有值,以使它们不再与其他2个表中的值相似。 PS:再次,没有测试。语法错误是可能的