2017-01-20 1 views
2

Когда мы объявляем строку, содержащую escape-последовательность, мы можем использовать @ перед строкой.Как сохранить последовательность выхода из пользовательского ввода (C#)

string fulljob = @"division\jobtitle"; 

Но как, если значение строки исходит от пользовательского ввода. Мне нужно запросить:

public string GetContactName(string fulljob) 
    { 

     QueryExpression query = new QueryExpression("contact"); 
     string[] cols = { "jobtitle", "lastname" }; 
     query.Criteria = new FilterExpression(); 
     query.Criteria.AddCondition("jobtitle", ConditionOperator.Equal, fulljob); 
     query.ColumnSet = new ColumnSet(cols); 

     EntityCollection ec = _service.RetrieveMultiple(query); 
     string tes = string.Empty; 

     foreach (Entity en in ec.Entities) 
     { 
      tes = tes + en["lastname"].ToString(); 
     } 
     return tes; 
    } 

Мы получаем string fulljob от пользовательского ввода. Когда мы запускаем запрос выше, он дает мне ошибку, потому что внутри строки есть escape-последовательность:

Условие атрибута 'contact.jobtitle': null не является допустимым значением для атрибута. Вместо этого используйте «Null» или «NotNull».

+2

выглядит как 'fulljob' фактически нулевое значение - как вы получите его от входа? Вы можете подумать о добавлении валидации входного параметра в методе или make 'query.Criteria.AddCondition (" jobtitle ", ConditionOperator.Equal, fulljob);' условный – MarioZG

ответ

3

Замените эту строку:

query.Criteria.AddCondition("jobtitle", ConditionOperator.Equal, fulljob); 

этим:

if (string.IsNullOrEmpty(fulljob)) 
    query.Criteria.AddCondition("jobtitle", ConditionOperator.Null); 
else 
    query.Criteria.AddCondition("jobtitle", ConditionOperator.Equal, fulljob);