この時点で、私はこのコードをあまりにも長く見ただけで、ロジックが曖昧になり、もっと注意が必要だと思います。
入力は、いくつかの 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]);
}
}
}
}