LINQ .Starts с или. Содержит проблемы в VB.NET4 - PullRequest
3 голосов
/ 03 августа 2010

Это может быть вопрос новичка ...

В моем коде я могу легко использовать "where Obj.Feld = String", но использование "where Obj.Feld.StartsWith (" a ")"не работаетСм. Следующие две функции:

    Public Function EntriesByFileName(ByRef Database() As Entry, ByVal Filename As _
  String) As IEnumerable(Of Entry)
        Dim Result As IEnumerable(Of Entry) = From EntryObject In Database _
        Where (EntryObject.FileName = Filename) Select EntryObject
        Return Result
    End Function

    Public Function EntriesLikeFileName(ByRef Database() As Entry, ByVal _
      Filename As String) As IEnumerable(Of Entry)
        Filename = Filename.ToLower
        Dim Result As IEnumerable(Of Entry) = From EntryObject In Database _
          Where EntryObject.FileName.StartsWith("a") Select EntryObject
        Return Result
    End Function

Первая функция (byFileName) работает нормально.Вторая функция (LikeFileName) не имеет.Используя Startswith, я получаю «Ссылка на объект не установлена ​​на экземпляр объекта».Что я делаю не так?

База данных - это массив объектов, структура, состоящая из строк

Ответы [ 4 ]

4 голосов
/ 03 августа 2010

EntryObject.FileName может быть NULL, поэтому EntryObject.FileName.StartsWith(..) может выдать NullReferenceException.

Измените условие на первую проверку для NULL, например,

if EntryObject.FileName <> nothing AndAlso EntryObject.FileName.StartsWith(..) 

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

2 голосов
/ 03 августа 2010

Убедитесь, что база данных не содержит пустых записей.Вы можете применить оператор = к null, но не можете вызывать какие-либо методы для него, поэтому StartsWith () завершается ошибкой.

1 голос
/ 03 августа 2010

выглядит так, как будто один из объектов EntryObject имеет свойство FileName, установленное в нуль. В первом методе он не будет обнаружен, поскольку вы можете сравнить нулевое значение с другим значением, но во втором методе вы пытаетесь вызвать метод для нулевого объекта, который вызовет исключение.

0 голосов
/ 03 августа 2010

Если вы используете linq для сущностей, то я не думаю, что он поддерживает начальный процесс или содержитПосмотреть это сообщение Stackoverflow сообщение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...