Как выбрать Datatable с несколькими переменными FirstOrDefault в VB.NET

Я хочу сделать несколько выборок с данными, но это еще не работает. Пожалуйста, направляйте.
Для 2 переменных, CodeProduct и Barcode, мне удалось, но добавить 2 переменные, ColorCode и Size, я все еще не могу

Public dt As New DataTable()
    Protected Overrides Sub OnLoad(e As EventArgs)
        MyBase.OnLoad(e)
        'dt = New DataTable
        dt.Columns.AddRange({
        New DataColumn("No", GetType(Integer)),
        New DataColumn("CodeProduct", GetType(String)),
        New DataColumn("Barcode", GetType(String)),
        New DataColumn("ColorCode", GetType(String)),
        New DataColumn("Size", GetType(String)),
        New DataColumn("Qty", GetType(Integer))
    })
        Grid.DataSource = dt
    End Sub

 Private Sub process()
        Dim Barcode = TextBox1.Text.Trim()
        Dim CodeProduct = TextBox2.Text.Trim()
        Dim ColorCode = "test"
        Dim Size = "test"
        Dim row As DataRow = Nothing
        If dt.Rows.Cast(Of DataRow).Any() Then
            'row = If(dt.Select($"Barcode = '{Barcode}'").FirstOrDefault(), dt.Select($"Codeproduct = '{CodeProduct }'").FirstOrDefault())
            row = dt.Select($"Barcode = '{Barcode}'" And $"Codeproduct = '{CodeProduct }'").FirstOrDefault()
        End If
    End Sub

Аргумент, который вы передаете методу Select, представляет собой просто предложение SQL WHERE. Такое предложение является просто логическим выражением. Как вы обычно строите логическое выражение, используя несколько критериев? Использование операторов AND и OR. Вы должны были прочитать соответствующую документацию и узнать это для себя. Документация Select содержит ссылку на документацию Expression, в которой приведен этот пример: (LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'. ВСЕГДА сначала читайте документацию.

jmcilhinney 24.07.2023 14:25

@jmcilhinney, спасибо за ваш ответ. Из вашего комментария я не нашел ссылку на документацию, которую вы имели в виду.

pret 24.07.2023 16:28

Я не уверен на 100%, что ваш код вообще пытается сделать. Полагаю, в том же духе, что и в других комментариях, что-то вроде dt.Select($"Barcode = '{Barcode}' AND "Codeproduct = '{CodeProduct }' AND .....").FirstOrDefault() — это то, о чем вы просите?

Hursey 25.07.2023 02:01

Просто нет оправдания тому, что вы не нашли документацию. Все, что вам нужно сделать, это щелкнуть имя метода в окне кода VS и нажать F1, чтобы перейти непосредственно к документации для этого метода. Контекстно-зависимая справка использовалась в VS десятилетиями, а в Windows — еще дольше. Вы также можете получить доступ к документации в целом через меню «Справка» в VS. У каждого должна быть закладка/избранное в браузере на странице поиска. Вот австралийский из моего браузера.

jmcilhinney 25.07.2023 03:49

@Hursey, спасибо за ваш ответ. поэтому я хочу сопоставить текстовое поле с datagridview через datatable и столбец qty, если то же самое, то просто добавьте значение в столбец «Qty». row = If(dt.Select($"Barcode = '{Barcode}'").FirstOrDefault(), dt.Select($"Codeproduct = '{CodeProduct }'").FirstOrDefault()). Я попробовал 2 столбца из вашего предыдущего рекомендательного кода, подобного этому, без ошибок, затем попробовал код от вас.

pret 25.07.2023 04:49

@Хурси, и сделай вот так row = dt.Select($"Barcode = '{Barcode}'" And $"Codeproduct = '{CodeProduct }'").FirstOrDefault() но вот такая ошибка Conversion from string "Barcode = '1000'" to type 'Long' is not valid.

pret 25.07.2023 04:49

@Hursey, row = If(dt.Select($"Barcode = '{Barcode}'").FirstOrDefault(), dt.Select($"Codeproduct = '{CodeProduct }'").FirstOrDefault()) если я использую этот код, то ошибки не будет, но я хочу добавить еще 2 столбца, которые будут доступны для данных в этом коде.

pret 25.07.2023 04:54

@jmcilhinney, спасибо за ваше руководство.

pret 25.07.2023 04:56

@jmcilhinney, The Select documentation provides a link to the Expression documentation and that provides this example: (LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John' из моего кода row = If(dt.Select($"Barcode = '{Barcode}'").FirstOrDefault(), dt.Select($"Codeproduct = '{CodeProduct }'").FirstOrDefault()) в row = dt.Select($"Barcode = '{Barcode}'" And $"Codeproduct = '{CodeProduct }'").FirstOrDefault() Пожалуйста, руководство от вас

pret 25.07.2023 04:58

Пожалуйста, не засоряйте комментарии кодом, обновите свой вопрос дополнительными деталями. Это только усложняет чтение. Также не уверен на 100%, в чем вопрос сейчас, похоже, в вашем последнем комментарии вы почти получили ответ. Условия соединения с использованием логических операторов в одном выборе (кстати, у вас есть дополнительный «$» там)

Hursey 25.07.2023 05:03

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

jmcilhinney 25.07.2023 05:24

Если вы получаете преобразование из строки «Штрих-код = '1000'» в тип «Длинный», это недопустимые ошибки. Честно говоря, если вы прочитали ошибку, она говорит вам ответ. Штрих-код имеет целочисленный тип, и вы сравниваете его со строкой. Мы не знаем ваших типов данных, поэтому должны исходить из кода, который вы публикуете. Либо преобразуйте «1000» в целое число, либо преобразуйте штрих-код в строку, это легко исправить.

Hursey 25.07.2023 05:44

@Hursey, row = If(dt.Select($"Barcode = '{Barcode}'").FirstOrDefault(), dt.Select($"Codeproduct = '{CodeProduct }'").FirstOrDefault()) Если я использую этот код, тогда нет ошибки и «штрих-кода», что означает строку типа данных. Conversion from string "Barcode = 'TEST'" to type 'Long' is not valid. Пробовал со строками тоже самое

pret 25.07.2023 06:23

@Hursey, If you are getting Conversion from string "Barcode = '1000'" to type 'Long' is not valid errors. Honestly, if you had read the error it's telling you the answer. Barcode is and integer type and you are comparing it to a String. Так что есть разница между вашим рекомендательным кодом и моим собственным кодом.

pret 25.07.2023 06:25

@Hursey, Please don't flood comments with code, update your question with extra details. Doing this just makes the whole thing hard to read. Also not 100% sure what the question is now, it looks like in your last comment you've almost got the answer. Join conditions using logic operators in a single select (You've got an extra '$' in there btw) Хорошо, я обновил, опубликовав код

pret 25.07.2023 06:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
15
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

согласно решению Вот ссылка! и хотя решение сделано на C# @MichaelPetrotta, но для меня это лучшее решение

If dt.Rows.Cast(Of DataRow).Any() Then
row = dt.Select($"Barcode = '{Barcode}' AND Codeproduct = '{CodeProduct}' AND ColorCode = '{ColorCode}' AND Size = '{Size}'").FirstOrDefault()
End If

Другие вопросы по теме