嘿人,
我正在修复我的一些朋友的应用程序。他们使用VB.NET和Windows Forms,而我在团队C#/ WPF / ASP。我对LINQ的了解也非常有限,即使它的所有.NET都是如此。我希望你能帮助我。
情况
表格上有两个组合。
他们从同一个表状态获取数据
状态对象的顺序取决于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,它应该没有任何区别。但它看起来确实如此。或者更可能的是,代码中存在一些非常愚蠢的错误,我无法找到。
任何人都知道问题是什么?
我非常感谢任何帮助。 : - )
greetz steven
答案 0 :(得分:0)
我想帮忙,但我不太确定我理解你的问题。根据您在此处获得的信息,该代码应该有效。唯一未知的是组合值的实际数据类型,但除非.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