2015-04-26 1 views
0

Я использую внешнюю DLL в качестве ссылки.Нужно выражение для передачи как параметра в C#

Когда я пытаюсь использовать метод, запрашивающий выражение в качестве параметра для фильтрации результатов.

Его ожидает типа следующего

Expression<Func<Template, bool>> типа в качестве параметра.

Тип шаблона имеет имя и идентификатор группы как свойства.

Я пытаюсь создать выражение, которое проверяет, равен ли объект идентификатору группы, и если имя содержится в списке элементов следующим образом.

Expression<Func<Template, bool>> filterTemplatesDestination = tmplt => 
    stselectedTemplates.Contains(tmplt.Name) && 
    tmplt.TemplateGroupId == stDestGroupID; 

Но когда я присваиваю это выражение методу, я получаю исключение. Если я использую только идентификатор группы для фильтрации, он работает нормально. Выражение бросает исключение, когда я использую условие, чтобы проверить, существует ли имя в моем состоянии.

+4

Можете ли вы предоставить код, который работает правильно (как вы упоминаете) и предоставить исключение, которое вы получаете с текущим образцом? – Prescott

+0

Единственное исключение, которое мне кажется, вы можете получить из этого кода nullReferenceExection на stselectedTemplates. Это он? –

ответ

1

Я думаю, вы получаете исключение NullReferenceException, я не вижу в вашем коде никакого другого возможного исключения. Попробуйте это:

Expression<Func<Template, bool>> filterTemplatesDestination = tmplt => 
      (stselectedTemplates!= null && tmplt.Name!=null && stselectedTemplates.Contains(tmplt.Name)) && 
      tmplt.TemplateGroupId == stDestGroupID; 
0

Кажется, что ваш stselectedTemplate или ваш tmplt.Name имеет нулевое значение, я бы ответ Паоло Косты и вместо того, чтобы проверить как нулевые исключения, но это может быть лучше для отладки кода и поиска именно поэтому эти переменные возвращают null.

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