在所有DataTable列中查找字符串

时间:2012-05-19 00:34:56

标签: c# foreach datatable

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

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

5 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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强制转换为您需要的任何内容(字符串,整数等)。

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

答案 2 :(得分: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);

答案 3 :(得分: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
    }
 }

答案 4 :(得分:-1)

您也可以在数据表上创建过滤器表达式。请参阅此MSDN article。在过滤器表达式中使用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());
 }