2015-07-07 2 views
-1

Привет всем У меня есть следующий запрос. В некоторых случаях для этого запроса результатов нет, и мне понадобится вернуть 0, а не ошибку.LINQ return 0, если запрос из DataTable равен

var count= dt.AsEnumerable().Where(x => x.Field<string>("names").Equals(name) && x.Field<string>("port").Equals("true")).Count(); 

Я попытался добавить ?? 0, но компилятору это не нравится.

благодарит за помощь!

+5

'Count' не бросает ошибка, если последовательность пуста, она возвращает 0. Вы вместо этого означаете, что 'dt' может быть« null »? –

+0

Какая ошибка у вас? – PaulF

+0

Тим, извините за путаницу. да, таблица данных может со временем не иметь записей, соответствующих запросу. мое ожидание было бы с COUNT, что оно вернулось бы 0, если не было записей. вместо этого я возвращаю систему. Ошибка DBNull. – user5019819

ответ

2

Enumerable.Count не выдает ошибку, если последовательность пуста, она возвращает 0. Вы вместо этого означаете, что dt может быть null? Таким образом, либо DataTable - null, либо одна из строк - null. Вам не нужно использовать String.Equals, вы можете использовать == для сравнения строк значимо, то вы не получите исключения. Вы также можете использовать этот короткий путь, используя перегрузку Count:

if(dt == null) return 0; 
return dt.AsEnumerable() 
    .Count(x => x.Field<string>("names") == name && x.Field<string>("port") == "true"); 
0

ли это:

var count=dt != null ? dt.AsEnumerable().Where(x => x.Field<string>("names").Equals(name) && x.Field<string>("port").Equals("true")).Count() : 0; 

Это будет просто проверить, если дт равно нулю, прежде чем какие-либо операции по сИ выполняются.

0

сравнение Yoda для ручки случае, если у вас есть нуль в базе данных:

var count= dt.AsEnumerable() 
      .Where(x => name.Equals(x.Field<string>("names")) 
         && "true".Equals(x.Field<string>("port"))) 
      .Count(); 

enter image description here