0

などのように見える列に値が存在する可能性があるDataTableがありますが、またはx:1 x:2 a:1 a:2のように見えることもあります。x*a*

私のコードでは、検索する完全な値を取得しています (たとえばx:1) が、行自体x*にその列のような値を含めることができます。どうにかして Select メソッドを使用して行を検索できますか?

今のところ、次のようになります。

strSelect = string.Format("[{0}]='{1}'", colName, ValueToSearch);
rows = tempTable.Select(strSelect);

もちろん、私が取得する唯一の行は、テーブルの行とまったく同じように見える行だけです。を検索するとx:1、行が取得されないことを意味しますx*

4

2 に答える 2

1

コードstrSelect = string.Format("[{0}]='{1}'", colName, ValueToSearch);は同じ値を選択します。サブセットを検索する場合は、LIKE 演算子を使用する必要があります。

strSelect = string.Format("[{0}] LIKE '{1}'", colName, ValueToSearch.Replace("*", "%");
于 2012-08-01T11:18:46.260 に答える
0

現時点では、データベースに 4 つの行が含まれており、クエリ対象の特定の列に次の値があると想定しています。

  • ×:1
  • ×:2
  • バツ*
  • a:1
  • a:2
  • a*

クエリで使用する必要がある「x:1」などの値が渡されていると述べていますが、クエリが最初の 3 つのレコード (「x:」の値を持つレコード) を返す必要があることを暗示しています。 1'、'x:2'、および 'x*'。つまり、'x:1' が渡されますが、実際には 'x' で始まる値を持つすべてのレコードを検索する必要があります。

その場合は、クエリを発行する前に C# コードの値を変更することをお勧めします。検索値が本当に 'x:1' の形式である場合は、SQL クエリに渡す前に最後の 2 文字を切り取ることができます。

string searchValue = "x:1"; // this presumably actually comes from user input
searchValue = searchValue.Substring(0, searchValue.Length - 2);
// Now searchValue is just "x", so go ahead and create your SQL query using the 'LIKE' operator

ただし、これは実際のデータを単純化したものにすぎないと感じているため、正確にするのが難しく、エラーチェックを含む例を提供するのも難しくなります。

もう少し複雑な例として、ユーザーが与える search-value は、文字列、または文字列の後にコロンが続き、さらに文字が続くものである可能性があります。その場合、与えられた文字列にコロンが含まれているかどうかを確認する必要があります。コロンが含まれている場合は、コロンとそれに続くものを切り落とす必要があります。

string searchValue = "abc:def";
if (searchValue.Contains(":"))
    searchValue = searchValue.Substring(0, searchValue.IndexOf(":"));
// Having stripped off ":def", you're left with "abc"

これで、LIKE 演算子を使用してクエリを発行できます。これは、TcKs が彼の回答で既に示したとおりです。たとえば、次のように、既にあるクエリ コードを変更できます。

strSelect = string.Format("[{0}] LIKE '{1}'", colName, ValueToSearch);
rows = tempTable.Select(strSelect);

LIKE 演算子を使用して、"abc"で始まる値を持つレコードを探しています。

于 2012-08-02T15:50:21.280 に答える