带有变量where子句的LINQ问题

时间:2014-01-02 19:48:53

标签: sql vb.net linq

第一次发帖提问,所以如果我做错了,我会提前道歉。

我有一个寡妇表单应用程序,其中包含一个列表框供用户进行一个或多个选择。这会提供LINQ查询以返回所需的数据。当用户进行单数选择时,查询起作用,但是当选择多个条目时,查询返回0结果。

以下是查询:

assets = From anitem In myTable
         Where String.Equals(cboStatus.SelectedItem.ToString,
             anitem.Field(Of String)("Status"),
             StringComparison.OrdinalIgnoreCase) _
         And Integer.Parse(anitem.Field(Of String)("Days Late")) <= intDays _ 
         And Enumerable.Range(0, facilities.Count).All(Function(i) _
             anitem.Field(Of String)("Facility").Contains(facilities(i))) _
         Select anitem
         Order By Integer.Parse(anitem.Field(Of String)("Days Late")) Ascending
             Select Facility = anitem.Field(Of String)("Facility"), _
             Zone = anitem.Field(Of String)("Zone"), _
             Building = anitem.Field(Of String)("Building"), _
             Floor = anitem.Field(Of String)("Floor"), _
             DeviceName = anitem.Field(Of String)("Device_Name"), _
             FullName = anitem.Field(Of String)("Full Device Name"), _
             DaysLate = Integer.Parse(anitem.Field(Of String)("Days Late")), _
             Status = anitem.Field(Of String)("Status"), _
             UserName = anitem.Field(Of String)("Username"), _
             Assignment = anitem.Field(Of String)("Assignment"), _
             ResponsibleParty = anitem.Field(Of String)("ResponsiblePartyName")

我认为问题出在代码的“And Enumerable.Range ...”部分。

作为标准使用的3件事是我需要返回超过天数,给定状态和任何选定位置的所有记录的天数,状态和位置。

我认为我很亲密,但我错过了一些东西,希望有人可以帮忙。

1 个答案:

答案 0 :(得分:0)

您确定以正确的方式使用.Contains吗?如果你这样写会怎么样?我相信facilities是您所选位置的列表?

assets = From anitem In myTable
         Where String.Equals(cboStatus.SelectedItem.ToString,
             anitem.Field(Of String)("Status"),
             StringComparison.OrdinalIgnoreCase) _
         And Integer.Parse(anitem.Field(Of String)("Days Late")) <= intDays _ 
         And facilities.Contains(anitem.Field(Of String)("Facility")) _
         Select anitem
         Order By Integer.Parse(anitem.Field(Of String)("Days Late")) Ascending
         Select Facility = anitem.Field(Of String)("Facility"), _
         Zone = anitem.Field(Of String)("Zone"), _
         Building = anitem.Field(Of String)("Building"), _
         Floor = anitem.Field(Of String)("Floor"), _
         DeviceName = anitem.Field(Of String)("Device_Name"), _
         FullName = anitem.Field(Of String)("Full Device Name"), _
         DaysLate = Integer.Parse(anitem.Field(Of String)("Days Late")), _
         Status = anitem.Field(Of String)("Status"), _
         UserName = anitem.Field(Of String)("Username"), _
         Assignment = anitem.Field(Of String)("Assignment"), _
         ResponsibleParty = anitem.Field(Of String)("ResponsiblePartyName")