3

我正在尝试找到一种在所有数据表列中查找字符串的快速方法!跟随不起作用,因为我想在所有列值中搜索。

string str = "%whatever%";
foreach (DataRow row in dataTable.Rows)
    foreach (DataColumn col in row.ItemArray)
        if (row[col].ToString() == str) return true;
4

6 回答 6

5

您可以使用 LINQ。它不会更快,因为如果值不存在,您仍然需要查看每个单元格,但它会放在一行中:

return dataTable
    .Rows
    .Cast<DataRow>()
    .Any(r => r.ItemArray.Any(c => c.ToString().Contains("whatever")));

要搜索随机文本并返回一组行,其中至少有一个单元格不区分大小写,请使用以下命令:

var text = "whatever";
return dataTable
    .Rows
    .Cast<DataRow>()
    .Where(r => r.ItemArray.Any(
        c => c.ToString().IndexOf(text, StringComparison.OrdinalIgnoreCase) > 0
    )).ToArray();
于 2012-05-19T00:39:34.370 回答
2

如果你想检查数据表中每一列的每一行,试试这个(它对我有用!)。

DataTable YourTable = new DataTable();
// Fill your DataTable here with whatever you've got.

foreach (DataRow row in YourTable.Rows)
{
    foreach (object item in row.ItemArray)
    {
        //Do what ya gotta do with that information here!
    }
}

不要忘记将类型转换object item为您需要的任何内容(字符串、整数等)。

我已经使用了调试器,它很有魅力。我希望这个帮助能祝你好运!

于 2013-01-11T17:22:48.453 回答
1

这可以通过过滤来实现。根据所有列创建(可重用)过滤字符串:

        bool UseContains = false;
        int colCount = MyDataTable.Columns.Count;


        string likeStatement = (UseContains) ? " Like '%{0}%'" : " Like '{0}%'"; 
        for (int i = 0; i < colCount; i++)
        {
            string colName = MyDataTable.Columns[i].ColumnName;
            query.Append(string.Concat("Convert(", colName, ", 'System.String')", likeStatement));


            if (i != colCount - 1)
                query.Append(" OR ");
        }

        filterString = query.ToString();

现在您可以获得其中一列与您的搜索字符串匹配的行:

 string currFilter = string.Format(filterString, searchText);
 DataRow[] tmpRows = MyDataTable.Select(currFilter, somethingToOrderBy);
于 2014-01-14T16:16:19.690 回答
0

您也可以使用包含列名称的字符串数组创建搜索例程:

string[] elems = {"GUID", "CODE", "NAME", "DESCRIPTION"};//Names of the columns             
foreach(string column in elems)
{
    string expression = string.Format("{0} like '%{1}%'",column, 
    txtSearch.Text.Trim());//Search Expression
    DataRow[] row = data.Select(expression);
    if(row.Length > 0) {
        // Some code here
    } else {
        // Other code here
    }
 }
于 2017-06-20T20:36:57.153 回答
0

您可以使用 ColmunName 方法获取列的名称。然后,您可以使用它们搜索 DataTable 中的每一列。例如,以下代码将起作用。

string str = "whatever";
foreach (DataRow row in dataTable.Rows)
{
    foreach (DataColumn column in dataTable.Columns)
    {
        if (row[column.ColumnName.ToString()].ToString().Contains(str))
        {
            return true; 
        }
    }
}
于 2021-11-16T16:55:17.310 回答
-1

您也可以在数据表上创建过滤器表达式。请参阅此 MSDN文章。在过滤器表达式中使用 like。

 string filterExp = "Status = 'Active'";
 string sortExp = "City";
 DataRow[] drarray;
 drarray = dataSet1.Customers.Select(filterExp, sortExp, DataViewRowState.CurrentRows);
 for (int i=0; i < drarray.Length; i++)
 {
    listBox1.Items.Add(drarray[i]["City"].ToString());
 }
于 2012-05-19T00:41:02.533 回答