Ошибка WPF: оператор '<=' не может применяться к операндам типа 'объект' и 'объект'

Я пытаюсь преобразовать свое приложение vb.net в C#, но когда я преобразовал код, чтобы проверить, находится ли ячейка даты между двумя изменениями даты devexpress, он запустит следующий код, но, к сожалению, я получил сообщение об ошибке, в котором говорилось:

Operator '<=' cannot be applied to operands of type 'object' and 'object'

Я искал в Интернете, но не могу найти решение своей проблемы

Вот мой код на C#:

foreach (DataRowView dr in Logs_Grid.Items)
                        {
                            SqlCommand cmd2 = new SqlCommand();
                            SqlDataReader rd2;
                            DataSet ds2 = new DataSet();
                            // Dim CustomerIDfromtheTbl

                            ds2.Clear();
                            cmd2.Connection = conn;
                            // SELECT TOP 1 WITH TIES * FROM International ORDER BY News_ID DESC
                            cmd2.CommandText = "SELECT *  FROM att_download where Machine_IP = '" + IP_txt.Text + "' and User_ID = '" + dr[0] + "' and Verify_Date = '" + Format(Convert.ToDateTime(dr[1]), ("yyyy-MM-dd")) + "' and Verify_Time = '" + Format(Convert.ToDateTime(dr[2]), "HH:mm:ss") + "'   ";
                            rd2 = cmd2.ExecuteReader();
                            // SELECT ID FROM INVOICE_HEAD ORDER BY ID DESC LIMIT 1
                            if (rd2.HasRows)
                            {
                                rd2.Read();
                                // MessageBox.Show("موجود مسبقا" + " " + rd2.Item("User_ID").ToString)
                                rd2.Close();
                            }

                            else if (dr[1] >= From_Date.EditValue && dr[1] <= To_Date.EditValue)
                            {
                                SqlCommand cmd4 = new SqlCommand();
                                SqlDataReader rd4;
                                DataSet ds4 = new DataSet();
                                // Dim CustomerIDfromtheTbl

                                ds4.Clear();
                                cmd4.Connection = conn;
                                // SELECT TOP 1 WITH TIES * FROM International ORDER BY News_ID DESC
                                cmd4.CommandText = "select * from Att_Users  where user_code ='" + dr[0] + "' and  machine_ip ='" + IP_txt.Text + "'";
                                rd4 = cmd4.ExecuteReader();
                                // SELECT ID FROM INVOICE_HEAD ORDER BY ID DESC LIMIT 1
                                if (rd4.HasRows)
                                {
                                    rd4.Read();


                                    string sqlString = "insert into att_download (User_ID,Verify_Date,Verify_Time,Verify_Type,Verify_State,WorkCode,CREATE_USER,CREATE_DATE,CREATE_TIME,User_Name,Emp_Code,Machine_IP) "
                                                                      + "values (@User_ID,@Verify_Date,@Verify_Time,@Verify_Type,@Verify_State,@WorkCode,@CREATE_USER,@CREATE_DATE,@CREATE_TIME,@User_Name,@Emp_Code,@Machine_IP)";
                                    using (SqlCommand cmd = new SqlCommand(sqlString, conn))
                                    {
                                        DateTime now = DateTime.Now;

                                        cmd.Parameters.Add(new SqlParameter("@User_ID", dr[0]));
                                        cmd.Parameters.Add(new SqlParameter("@Verify_Date", dr[1]));
                                        cmd.Parameters.Add(new SqlParameter("@Verify_Time", dr[2]));
                                        cmd.Parameters.Add(new SqlParameter("@Verify_Type", dr[3]));
                                        cmd.Parameters.Add(new SqlParameter("@Verify_State", dr[4]));
                                        cmd.Parameters.Add(new SqlParameter("@WorkCode", dr[5]));
                                        cmd.Parameters.Add(new SqlParameter("@CREATE_USER", Main_UserName));
                                        cmd.Parameters.Add(new SqlParameter("@CREATE_DATE", DateTime.Today.ToString("yyyy-MM-dd")));
                                        cmd.Parameters.Add(new SqlParameter("@CREATE_TIME", now.ToString("HH:mm:ss")));
                                        cmd.Parameters.Add(new SqlParameter("@User_Name", rd4["user_name"]));
                                        cmd.Parameters.Add(new SqlParameter("@Emp_Code", rd4["Emp_Code"]));
                                        cmd.Parameters.Add(new SqlParameter("@Machine_IP", IP_txt.Text));



                                        cmd.ExecuteNonQuery();
                                    }

                                    rd4.Close();
                                }
                            }

а вот код vb.net:

For Each dr As DataRowView In Logs_Grid.Items



                        Dim cmd2 As New SqlCommand
                        Dim rd2 As SqlDataReader
                        Dim ds2 As New DataSet
                        'Dim CustomerIDfromtheTbl

                        ds2.Clear()
                        cmd2.Connection = conn
                        'SELECT TOP 1 WITH TIES * FROM International ORDER BY News_ID DESC
                        cmd2.CommandText = "SELECT *  FROM att_download where Machine_IP = '" & IP_txt.Text & "' and User_ID = '" & dr(0) & "' and Verify_Date = '" & Format(Convert.ToDateTime(dr(1)), ("yyyy-MM-dd")) & "' and Verify_Time = '" & Format(Convert.ToDateTime(dr(2)), "HH:mm:ss") & "'   "
                        rd2 = cmd2.ExecuteReader
                        'SELECT ID FROM INVOICE_HEAD ORDER BY ID DESC LIMIT 1
                        If rd2.HasRows Then

                            rd2.Read()
                            'MessageBox.Show("موجود مسبقا" + " " + rd2.Item("User_ID").ToString)
                            rd2.Close()
                        Else
                            If dr(1) >= From_Date.EditValue And dr(1) <= To_Date.EditValue Then

                                Dim cmd4 As New SqlCommand
                                Dim rd4 As SqlDataReader
                                Dim ds4 As New DataSet
                                'Dim CustomerIDfromtheTbl

                                ds4.Clear()
                                cmd4.Connection = conn
                                'SELECT TOP 1 WITH TIES * FROM International ORDER BY News_ID DESC
                                cmd4.CommandText = "select * from Att_Users  where user_code ='" & dr(0) & "' and  machine_ip ='" & IP_txt.Text & "'"
                                rd4 = cmd4.ExecuteReader
                                'SELECT ID FROM INVOICE_HEAD ORDER BY ID DESC LIMIT 1
                                If rd4.HasRows Then

                                    rd4.Read()


                                    Dim sqlString As String = "insert into att_download (User_ID,Verify_Date,Verify_Time,Verify_Type,Verify_State,WorkCode,CREATE_USER,CREATE_DATE,CREATE_TIME,User_Name,Emp_Code,Machine_IP) " _
                                                                      & "values (@User_ID,@Verify_Date,@Verify_Time,@Verify_Type,@Verify_State,@WorkCode,@CREATE_USER,@CREATE_DATE,@CREATE_TIME,@User_Name,@Emp_Code,@Machine_IP)"
                                    Using cmd As SqlCommand = New SqlCommand(sqlString, conn)

                                        cmd.Parameters.Add(New SqlParameter("@User_ID", dr(0)))
                                        cmd.Parameters.Add(New SqlParameter("@Verify_Date", dr(1)))
                                        cmd.Parameters.Add(New SqlParameter("@Verify_Time", dr(2)))
                                        cmd.Parameters.Add(New SqlParameter("@Verify_Type", dr(3)))
                                        cmd.Parameters.Add(New SqlParameter("@Verify_State", dr(4)))
                                        cmd.Parameters.Add(New SqlParameter("@WorkCode", dr(5)))
                                        cmd.Parameters.Add(New SqlParameter("@CREATE_USER", Main_UserName))
                                        cmd.Parameters.Add(New SqlParameter("@CREATE_DATE", Format(Date.Today, ("yyyy-MM-dd"))))
                                        cmd.Parameters.Add(New SqlParameter("@CREATE_TIME", Format(TimeOfDay, "hh:mm:ss")))
                                        cmd.Parameters.Add(New SqlParameter("@User_Name", rd4.Item("user_name").ToString))
                                        cmd.Parameters.Add(New SqlParameter("@Emp_Code", rd4.Item("Emp_Code").ToString))
                                        cmd.Parameters.Add(New SqlParameter("@Machine_IP", IP_txt.Text))



                                        cmd.ExecuteNonQuery()
                                    End Using

                                    rd4.Close()
                                End If


                            End If
                        End If


                    Next

ошибка генерируется из этой строки:

 else if (dr[1] >= From_Date.EditValue && dr[1] <= To_Date.EditValue)

код XAML:

 <DataGrid x:Name = "Logs_Grid" IsReadOnly = "True" SelectionUnit = "FullRow" AutoGenerateColumns = "False" CanUserAddRows = "True"  Margin = "138,179,10,10">
            <DataGrid.Resources>
                <Style BasedOn = "{StaticResource {x:Type DataGridColumnHeader}}" TargetType = "{x:Type DataGridColumnHeader}">
                    <Setter Property = "Background" Value = "#F78A09" />
                    <Setter Property = "Foreground" Value = "#F0F0F0" />


                </Style>


                <Style TargetType = "ScrollBar" >
                    <Setter Property = "Background" Value = "#FAFAFA" />

                </Style>



                <Style TargetType = "DataGridCell">
                    <Style.Triggers>
                        <Trigger Property = "IsSelected" Value = "True">
                            <Setter Property = "Background" Value = "#360E05"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>

            </DataGrid.Resources>

            <DataGrid.Columns>
                <DataGridTextColumn  Header = "كوده بالجهاز" x:Name = "UserID" IsReadOnly = "True" Binding = "{Binding Path=UserID}" Foreground = "#F0F0F0"/>
                <DataGridTextColumn Header = "تاريخ البصمة" x:Name = "VerifyDate" IsReadOnly = "True" Binding = "{Binding Path=VerifyDate}" Foreground = "#F0F0F0" />
                <DataGridTextColumn Header = "توقيت البصمة" x:Name = "VerifyTime" IsReadOnly = "True" Binding = "{Binding Path=VerifyTime}" Foreground = "#F0F0F0"/>

                <DataGridTextColumn Header = "نوع البصمة" x:Name = "VerifyType" IsReadOnly = "True" Binding = "{Binding Path=VerifyType}" Foreground = "#F0F0F0"/>
                <DataGridTextColumn Header = "حالة البصمة" x:Name = "VerifyState" IsReadOnly = "True" Binding = "{Binding Path=VerifyState}" Foreground = "#F0F0F0"/>
                <DataGridTextColumn Header = "كود العمل" x:Name = "WorkCode" IsReadOnly = "True" Binding = "{Binding Path=WorkCode}" Foreground = "#F0F0F0"/>

            </DataGrid.Columns>



            <DataGrid.RowStyle>
                <Style  TargetType = "DataGridRow" >


                    <Setter Property = "Background" Value = "#8CB3EF"></Setter>

                </Style>
            </DataGrid.RowStyle>

        </DataGrid>


        <dxe:DateEdit x:Name = "From_Date" HorizontalAlignment = "Left" Margin = "10,251,0,0" VerticalAlignment = "Top" Width = "120"/>
        <dxe:DateEdit x:Name = "To_Date" HorizontalAlignment = "Left" Margin = "10,314,0,0" VerticalAlignment = "Top" Width = "120"/>
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
0
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Если вы включите Option Strict в VB, вы получите ту же ошибку. Когда Option Strict выключено, VB пытается преобразовать переменную за вас, C# этого не делает. Вам нужно будет привести вашу переменную к правильному типу данных. Что-то типа:

else if ((DateTime)dr[1] >= From_Date.EditValue && (DateTime)dr[1] <= To_Date.EditValue)

Или используйте метод, чтобы получить правильную переменную

else if (dr.GetDateTime(1) >= From_Date.EditValue && dr.GetDateTime(1) <= To_Date.EditValue)

Я попробовал и получил ту же ошибку: оператор '<=' не может применяться к операндам типа DateTime и object

Mohamad Salama 17.12.2018 20:51

@MohamadSalama ошибка вроде сказать это. EditValue имеет тип Object, но его необходимо преобразовать в DataTime. Некоторым нравится: (DateTime) From_Date.EditValue

the_lotus 17.12.2018 20:52

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