2014-09-15 4 views
0

Я пытаюсь фильтровать DataTable с LINQ, я пытался сделать это ..Как выбрать * из DataTable Где ... используя Linq

string strFind = "Road"; 
var query = from a in res.AsEnumerable() 
      where (a.Field<string>("Last Name") == strFind || 
      a.Field<string>("First Name") == strFind || 
      a.Field<string>("Address") == strFind)     
      select a; 

У меня есть около 5 других столбцов, которые я получил в отфильтруйте также, это проверяет код прямо сейчас, чтобы увидеть, будет ли это работать, а это не так. Я попытался помещать данные в список и фильтровать с помощью .Contains (strFind), но это тоже не сработало.

+1

* Не работает * не хватает. – MarcinJuraszek

+0

@MarcinJuraszek, достаточно справедливо. Его ничего не возвращает. – Chris

+0

кейс чувствительность? –

ответ

0

Запрос LINQ фактически ничего не делает для списка, который вы запрашиваете. Этот запрос дает вам список результатов. Если вы хотите, чтобы пользователь увидел эти результаты, вы должны фактически показать им эти результаты, например. вызовите ToArray или ToList или, в этом случае, CopyToDataTable, а затем привяжите этот результат к сетке или тому подобное.

0

Он также работает:

var query = res.AsEnumerable() 
     where (a.Field<string>("Last Name") .CustomContains(strFind,StringComparison.OrdinalIgnoreCase) || 
     a.Field<string>("First Name") .CustomContains(strFind,StringComparison.OrdinalIgnoreCase) || 
     a.Field<string>("Address") .CustomContains(strFind,StringComparison.OrdinalIgnoreCase) 
     ).ToList() 

Используйте ниже метод расширения для решения чувствительности случая в strFind

public static bool CustomContains(this string source, string toCheck, StringComparison compare) 
    { 
     return source.IndexOf(toCheck, compare) >= 0; 

    } 
Смежные вопросы