CodeMan5000
CodeMan5000

Reputation: 1087

Check Linq Result for value

How can I check the results of LINQ query for a specific string value?

I have the following linq query:

IEnumerable<DataRow> rows = searchParamsTable.AsEnumerable()
                                        .Where(r => r.Field<String>("TABLE") == tableNumbers[i].ToString()
                                        && r.Field<String>("FIELD ") == fieldName[i]);

I want to see if the result of that query contains a string(passed in form a text box) "wildcardSearchString".

Upvotes: 0

Views: 488

Answers (4)

Gert Arnold
Gert Arnold

Reputation: 109080

I don't know if you're aware of the built-in search capabilities of a DataTable? You could use its Select method:

DataRow[] rows = searchParamsTable
    .Select("TABLE = 'Table1' AND FIELD like '%wildcardSearchString%'");

Linq is OK but not always required :).

Upvotes: 1

SPFiredrake
SPFiredrake

Reputation: 3892

var searchRows = 
        rows.Where(tr => tr.ItemArray
            .Any(ti => ti.ToString().IndexOf("wildcardSearchString", StringComparison.CurrentCultureIgnoreCase) > 0))

This will go through each of the rows that was returned, and see if "wildcardSearchString" is in the rows item string representation (ignoring case). Here's the problem though, this won't get you wildcard search support, so you'll have to figure that one out yourself. You can try to use Regex, which would require a slight modification:

string searchPattern = "some*string".Replace("*", ".*");
var searchRows = 
        rows.Where(tr => tr.ItemArray
            .Any(ti => Regex.IsMatch(ti.ToString(), searchPattern)))

Hope that helps. Just be warned that if they decide to try supplying a Regex pattern than this might really mess up whatever they were searching for, so you just need to be careful of input.

Upvotes: 1

Anthony
Anthony

Reputation: 427

Boolean found = false;
foreach(Datarow d in rows)
{
    foreach(object o in d.ItemArray)
    {
        if(o.ToString().Contains("test")
        {
            found=true;
            break;
        }
    }
}

Do you mean something like this?

Upvotes: 1

Aghilas Yakoub
Aghilas Yakoub

Reputation: 28970

try with this code

   DataRow[] array = rows.ToArray();

   array.Contains(yourIndex, yourTextBox.Text); 

Add this extension

 public static bool Contains(this DataRow[] dataRows, string value, int index)
   {
     foreach(var row in dataRows)
     {
        if(row[index].ToString().Contains(value))
        {
             return true;
        }
     } 
     return false;
  } 

Upvotes: 1

Related Questions