2

この時点で、私はこのコードをあまりにも長く見ただけで、ロジックが曖昧になり、もっと注意が必要だと思います。

入力は、いくつかの List<> オブジェクトを作成する一連のコントロールです。関連する変数は、フィールド値のリストを含む string[] である「sarray」を含むリストである importData です。"validIndeces" と "indecesCantBeDuplicated" で参照される Lists<> には、実際に必要な importData の sarray 内のアイテムのインデックスが含まれており、同じフィールドで重複できないものはどれか (つまり、2 つの会社 ID が同じではありません) )。

ここでの目標は、importData の string[] を取得し、クエリで必要のないものを除外し、特定のテーブルのデータと互換性を持たせるための命令を実行してから、テーブルに重複が存在しないことを確認することです。指定されたフィールド。フィールドが「indecesCantBeDuplicated」で示され、一致が同じインデックスの importData で以前に見つかった場合は、次の string[] オブジェクトに移動する必要があります。それ以外の場合は、クエリに行を追加します。

出力は基本的に SQL の一連の Insert ステートメントに出力されますが、そのコードは問題ありません。ここが私が立ち往生している場所です。これで重複を除外しないのはなぜですか?

//go through each string array in the import (i.e. each record to import)
foreach (string[] sarray in importData) {
    List<List<string>> QueryList = new List<List<string>>();
    List<string> Queriables = new List<string>();
    for (int i = 0; i < sarray.Count(); i++) {
        bool addit = true;
        if (validIndeces.Contains(i)) {
        //ensure this is one of the indeces used to import
            if (indecesCantBeDuplicated.Contains(i)) {
                // if THIS index can't have duplicate values
                foreach (string[] s2 in importData) {
                    //check each record in the import
                    foreach(string s in s2) {
                        //check each field in the record
                        if (s2.ElementAt(i) == sarray[i]) {
                            //if the field value at this index matches the one we're about to put in
                            addit = false;
                        } else {
                            addit = true;
                        }
                    }
                }
            }
            if (indecesToDelimit.Contains(i)) {
                //ensure that delimiters are added to all text field values
                sarray[i] = "'" + sarray[i] + "'";
            }

            if (addit) {
                Queriables.Add(sarray[i]);
            }
        }
    }
}
4

1 に答える 1

1

を検出したら、foreachから抜け出す必要がありますaddit == false。それ以外の場合はtrue、次のループ反復で再びに設定されます。

{
    addit = false;
    break;
}
于 2012-12-11T15:53:22.687 に答える