0

我有一个包含三个表的数据集。我想将一个表中的列项与其他两个表中的列项进行比较,但为此我使用嵌套的 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 ******/
                }
            }

如果需要我可以澄清一下,谢谢!

编辑:

我想从表'Taxonomy'中提取一个项目,然后将它与表'DefaultEventTypes'中的每一行进行比较。如果匹配,然后我想将“分类”项目与“ScheduleEvent”中的每一行进行比较。

最终,我想添加更新语句以将匹配项更改为新名称并将表保存回数据库。

它似乎在进行比较,但它返回的值的数量太大了。

4

1 回答 1

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:再次,没有测试。可能出现语法错误

于 2012-09-27T18:21:12.117 回答