Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Теперь, когда интересный вопрос.
Прямо сейчас, Вы не можете дать SQL Server команду выполнять функции XML непосредственно от Linq. Однако можно заставить Linq использовать определяемые пользователем функции... так, Вы могли установить udf, чтобы обработать xml, получить правильные данные, и т.д., и затем использовать это в Вашем Linq выражении. Это выполнит на сервере и должно сделать то, что Вы хотите. Существует важное ограничение, хотя: путь XML, который Вы ищете (первый параметр к xmlColumn.value
или подобный) должен быть встроен в функцию, потому что это должна быть строка литерал , это не может быть создано из входного параметра (например). Таким образом, можно использовать UDFs для получения полей, Вы знаете о при записи UDF, но не как способ общего назначения получить данные из столбцов XML.
Выезд раздел Supporting User Defined Functions (UDFs) превосходная серия Blog Scott Gutherie на Linq к SQL для большего количества информации о реализации.
Hope это помогает.
Для разъяснения ответа Daniel - Вы не можете использовать функцию, чтобы сделать это, если часть XPath запроса не фиксируется. См. мою запись в блоге на этом: http://conficient.wordpress.com/2008/08/11/linq-to-sql-faq-xml-columns-in-sql/
В основном Вы не можете запросить xml столбец через LINQ к SQL. Хотя это возвращает тип XElement, Вы не можете сделать никаких переводов SQL при попытке отфильтровать на этом столбце.
LINQ к SQL действительно поддерживает использование UDFs - но сам SQL не позволит Вам использовать строку параметров в XML xpath запрос - это должен быть строковый литерал. Это означает, что может работать, если XPath фиксируется во время проектирования, но не, если Вы хотели быть в состоянии передать переменный оператор XPath.
Это приводит только к двум другим альтернативным способам сделать его: встроенный SQL-оператор (который инвертирует значение наличия LINQ), и запись Библиотечной функции SQL в CLR.NET, чтобы сделать это.