2015-07-04 3 views
0

Я фильтрую данные от datatable с использованием linq, он работает нормально, за исключением случаев, когда критерии поиска не совпадают, результирующая таблица не обрабатывается для пустоты. Ниже мой код:Фильтрация DataTable и неспособность обрабатывать пустой результат

var table = dtTokensInfo.AsEnumerable() 
        .Where(r => r.Field<string>("tokenName").Contains(txtTokenName.Text)) 
        .CopyToDataTable(); 

Я хочу, чтобы таблица содержит значения, отфильтровываются из dtTokensInfor, но я не в состоянии справиться с этим, когда критерии поиска не соответствует

ответ

1

Вы должны отделить вызов CopyToDataTable от результат выражения Linq

DataTable table = null; 
var temp = dtTokensInfo.AsEnumerable() 
       .Where(r => r.Field<string>("tokenName") 
       .Contains(txtTokenName.Text)); 

if(temp != null) 
    table = temp.CopyToDataTable(); 

Если вы посмотрите на IEnumerable расширение MSDN page about CopyToDataTable вы заметите это между возможными исключениями выброшенных

ArgumentNullException: Исходная последовательность IEnumerable (Of T) - Ничего и новая таблица не может быть создана.

+2

Классический пример того, почему функции «цепочки» могут приводить к разным проблемам. –

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