Запрос Linq to Sql завершается неудачно с "X не является членом 'String'" - PullRequest
0 голосов
/ 04 января 2011

Представление базы данных: Таблица 3

Account Number     |Name      |Address        |Movies Rented   |Date               
00001              |John      |dbfdgjfkhgj    |fhdfhjfgjhk     |11/17/10
00002              |Michael   |gefjkyuthjs    |dgshythety      |10/12/10 
00003              |Maverick  |fgfshbsfgjk    |asdjbinn        |12/01/10 
00003              |Maverick  |gdsffgbhgfhg   |dfdfhfh         |12/02/10 
00004              |Joel      |dsgdsffh       |gdsfhfdh        |11/14/10
00004              |Joel      |hdfgjgfhgfj    |gsdhfdhjty      |11/14/10  
00003              |Maverick  |ertgrjrjtypo   |dsgdgrhtyth     |12/03/10

Я столкнулся с чем-то вроде логической ошибки, которую я едва мог устранить, так как я новичок в этой технологии. Я использую Visual Basic 2008 Express Edition со встроенным linq-to-sql технология. Я смог получить, добавить, отредактировать и удалить такую ​​запись, используя метод linq-to-sql, но я не смог получить что-то вроде операции с реляционной базой данных.

Вот моя проблема. Как вы можете видеть таблицу выше, которая представляет записи в моей базе данных. Вы можете заметить, что там были дублированы номера счетов, которые я используется в качестве первичного ключа или идентификатора. Я хочу, чтобы при запросе такого номера счета отображались все записи с одинаковыми номерами. Скажем, например, если я запрашиваю номер счета 00003. Он должен только подтянуть и отобразить три записи с именем Maverick и их соответствующим адресом, арендованным фильмом и датой.

То, что происходит с моей стороны, происходит, когда я запрашиваю такой номер счета, который дублируется в базе данных, я столкнулся с двумя вещами: либо он будет отображать все записи в базе данных с разными номерами учетных записей, либо он выдаст мне ошибку сообщение, если я изменю свой код с оператора For Each memrec In db.Table3s на For Each memrec In retrn. То, что я пытался сделать здесь, это то, что если вы вводите номер учетной записи в поле поиска, он должен отображать только записи в поле со списком, связанные с вводимым номером учетной записи. Например, если вы введете 00003 в поле поиска, в поле со списком должны отображаться только три фильма, взятые напрокат Maverick.

Вот коды, которые я использовал:

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

    Dim db As New memrecDataContext()

    Dim ret As String
    ret = InputBox("Enter Account#", "Search")

    Dim retrn = _
    From memrec In db.Table3s _
    Where memrec.Account_ = ret _
    Select memrec.Movies_Rented()

    For Each memrec In db.Table3s
        If memrec.Account_ = ret Then
            Form4.ComboBox5.Text = memrec.Account_
            Form4.ComboBox4.Text = memrec.Name
            Form4.DateTimePicker1.Value = memrec.Date
            Form4.ComboBox2.Text = memrec.Movies_Rented
            Form4.ComboBox1.Text = memrec.Address     
            Form4.Show()

        End If
    Next

End Sub

этот код выше не будет фильтровать записи, связанные с номером учетной записи, вводимым в поле поиска, поскольку он по-прежнему будет извлекать все записи в базе данных, и если я также буду использовать этот блок кодов ниже:

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

    Dim db As New memrecDataContext()

    Dim ret As String
    ret = InputBox("Enter Account#", "Search")


    Dim retrn = _
    From memrec In db.Table3s _
    Where memrec.Account_ = ret _
    Select memrec.Movies_Rented()

    For Each memrec In retrn
        If memrec.Account_ = ret Then
            Form4.ComboBox5.Text = memrec.Account_
            Form4.ComboBox4.Text = memrec.Name
            Form4.DateTimePicker1.Value = memrec.Date
            Form4.ComboBox2.Text = memrec.Movies_Rented
            Form4.ComboBox1.Text = memrec.Address
            Form4.Show()

        End If
    Next

End Sub

это все равно выдаст мне ошибку, сказав следующее

'Account_' is not a member of 'String'.
'Name' is not a member of 'String'.
'Address' is not a member of 'String'.
'Movies_Rented' is not a member of 'String'.
'Date' is not a member of 'String'.

Спасибо за ваш ответ. Я уже пробовал этот набор кодов раньше, но он работает так же. Я много раз пытался изменить свои коды, прежде чем я оставил свой комментарий на этом форуме, думая, что я могу решить его самостоятельно, но я не смог. Этот код по-прежнему не будет фильтровать записи в базе данных. Я хотел бы убедиться, что приведенная выше таблица является только представлением, но реальный столбец в таблице в моей базе данных - это «Номер счета», а не Номер счета, и Visual Basic обнаружит код как «Счет_». Могу ли я узнать, почему столбец Movies_Rented в моей таблице не является элементом строки? Почему код, который вы дали, будет по-прежнему отображать все записи в поле со списком?

1 Ответ

1 голос
/ 04 января 2011

В вашем примере вы выбираете memrec.Movies_Rented, который будет возвращать только столбец Movies_Rented, который будет просто массивом строк, следовательно, ошибки «такой-то и не-член строки»Вы просто хотите выбрать memrec.

Dim retrn = _
    From memrec In db.Table3s _
    Where memrec.Account_ = ret _
    Select memrec

Поскольку он не фильтруется правильно, похоже, вы пытаетесь сравнить, используя Account_, который не является частью вашей таблицы.Вам может понадобиться выполнить фильтрацию по Account_Number.(Это все зависит от того, как происходит отображение LINQ, эта часть вашего кода может быть просто в порядке).

Фильтрация выглядит хорошо для меня.Это может быть потому, что вы вводите «3» в текстовое поле, а не «000003».(Я предполагаю, что номера ваших учетных записей хранятся в виде строк в базе данных.)

Кроме того, я вижу, что вы устанавливаете текст комбинированных полей.Это может или не может быть предназначено, но я подозреваю, что вы хотите добавить элемент в их список вариантов.

Как только вы решите проблему выбора, должно быть легче увидеть, если вы получаете правильные результаты(а если нет, то как их исправить).

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