我有,其中有可能是它看起来像一个列值的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*
代码strSelect = string.Format("[{0}]='{1}'", colName, ValueToSearch);
将选择相同的值。 如果你想搜索的子集,则必须使用LIKE操作:
strSelect = string.Format("[{0}] LIKE '{1}'", colName, ValueToSearch.Replace("*", "%");
我假设为你的数据库包含4行,用,你想查询对一个给定列下面的值的时刻:
你的国家,你被交给一个值,如“X:1”,你需要在查询中使用,但你暗示查询应该结束了返回前三个记录 - 与“X值的那些: 1' , 'X:2',和 'X *'。 换句话说,虽然你被交给“X:1”,你居然要搜索具有与“X”开头的值的任何记录。
如果是这样的情况,你可能最好关闭发出查询之前修改你的C#代码的值。 如果搜索值是真正形式的“X:1”,你可能只是最后两个字符递给了SQL查询之前砍掉:
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
我有一种感觉,这只是一个实际的数据简单化,虽然,这使得它很难做到准确和也使其难以提供包括错误检查的例子。
对于稍微复杂一些的,也许是搜索值用户给你可以是一串字母或字母后跟一个冒号后面跟多个字母的字符串。 在这种情况下,你需要检查你已经给出的字符串是否包含一个冒号,如果确实如此,你需要砍掉它后面的冒号和任何东西:
string searchValue = "abc:def";
if (searchValue.Contains(":"))
searchValue = searchValue.Substring(0, searchValue.IndexOf(":"));
// Having stripped off ":def", you're left with "abc"
现在,您可以继续发出查询,使用LIKE运算符,如第三文化孩子在他的答案已经显示。 例如,你可以修改你已经有了如下的查询代码:
strSelect = string.Format("[{0}] LIKE '{1}'", colName, ValueToSearch);
rows = tempTable.Select(strSelect);
通过使用LIKE操作,你现在正在寻找有与“ABC” 开始的值的任何记录。