0

LINQ クエリを作成するのは初めてで、文字列の比較に問題があります。データを DataTable にロードしています (SQL DB のテーブルと DataTable の行数が同じであることを確認しました) が、何らかの理由で、両方に存在することがわかっている値が見つかりません。

テキスト ボックスには「servername」が含まれ、データ行には「servername.mydomain.net」が含まれているため、コードは次のようになります。

string strParameter = txtAutoComplete.ToString().ToLower();

    //WUG TableAdapter and DataTable
    dsCIInfoTableAdapters.DeviceTableAdapter taWUG;
    taWUG = new dsCIInfoTableAdapters.DeviceTableAdapter();

    dsCIInfo.DeviceDataTable dtWUG = new dsCIInfo.DeviceDataTable();
    taWUG.Fill(dtWUG);

    var qstWUG = (from row in dtWUG.AsEnumerable()
                  where row.Field<string>("sDisplayName").ToLower().Contains(strParameter)
                  select row.Field<string>("sDisplayName"));
4

3 に答える 3

0

letブレークポイントを追加できるステートメントをいくつか追加すると、簡単にデバッグできます。

    var qstWUG = (from row in dtWUG
                  let display = row.Field<string>("sDisplayName")
                  let lower = display.ToLower()
                  let contains = lower.Contains(strParameter)
                  where contains
                  select display).ToArray();

また、最後に使用して配列に変換すると、.ToArray()すぐに実行されます (LINQ はパラダイムによって遅延され、必要になるまで実行されません)。また、後続のブレークポイントで簡単に確認できます。

于 2013-04-30T19:15:02.080 に答える