0

3 つのテーブルを含むデータセットがあります。1 つのテーブルの列アイテムを他の 2 つのテーブルの列アイテムと比較したいのですが、これを行うためにネストされた 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 番目のテーブルのすべての値を更新して、他の 2 つのテーブルの値と類似しないようにします。PS: 繰り返しますが、それはテストしていません。構文エラーの可能性があります

于 2012-09-27T18:21:12.117 に答える