VB.NET:对数据表进行LINQ查询- WHERE Id>=0

zpqajqem  于 2022-12-06  发布在  .NET
关注(0)|答案(1)|浏览(214)

"大家好“
我正在为我的一些朋友修补一个程序。他们使用VB .NET和Windows窗体,而我在C#/WPF/ASP团队。我对LINQ的了解也很有限,即使是所有的. NET。我希望你能帮助我。
"当时的情况"
表单上有两个组合。它们从同一个表 status 中获取数据。
状态对象的顺序取决于id列。
第二个组合应仅包含id〉= combo1.id的状态。因此,用户只能选择第二个组合中“大于等于”第一个组合中状态的状态。
最小的status.id是3。
"密码"
(请忽略 index 等无用的向后和向前转换。我想在回顾代码时向您展示它。)

Dim index As String = cmbStatusFrom.SelectedValue.ToString()
                    If index = "0" Then
                        index = "1"
                    End If

                    Dim query As IEnumerable(Of DataRow) = _
                        From status In ContextDataTable.AsEnumerable() _
                        Where status.Field(Of Integer)("Id") >= Integer.Parse(index) _
                        Select status

“问题是”

If index = "0" Then  
    index = "1"  
End If

生成的数据表包含的行比它应该包含的多一行。(0表示在第一个组合框中选择了空项)该行的id = 0(与空行类似)
同样,现有的最小id是3,所以使用〉=0、1、2或3应该不会有什么区别,但看起来确实有区别,或者更有可能的是,代码中有一些愚蠢的错误,而我就是找不到。
有人知道问题出在哪里吗?
我非常感谢任何帮助。:-)
格雷兹·斯蒂文

e4eetjau

e4eetjau1#

我很想帮你,但是我不太确定我是否理解你的问题。根据你在这里所得到的信息,这段代码应该可以工作。唯一未知的是combo的值的实际数据类型,但是除非.Field(Of T)抛出InvalidCastException,否则你应该很擅长这方面。我写了下面的代码,并把它放到了一个单元测试项目中。结果一切都很好......至少在结果数据集的长度方面是这样。
编号

<TestCase(0, ExpectedResult:=4)>
    <TestCase(1, ExpectedResult:=4)>
    <TestCase(2, ExpectedResult:=3)>
    <TestCase(3, ExpectedResult:=2)>
    <TestCase(4, ExpectedResult:=1)>
    <TestCase(5, ExpectedResult:=0)>
    Public Function tmptest(ByVal selected As Integer) As Integer

        Dim d As New DataTable
        d.Columns.Add(New DataColumn("id", GetType(Integer)))
        For j = 0 To 5
            Dim r = d.NewRow()
            r("id") = j
            d.Rows.Add(r)
        Next

        If selected = 0 Then selected = 1
        Dim query = From status In d.AsEnumerable()
                    Where status.Field(Of Integer)("id") > selected
                    Select status

        Return query.Count
    End Function

结果数

相关问题