【问题标题】:Issue with LINQ with a variable where clause带有变量 where 子句的 LINQ 问题
【发布时间】:2014-01-02 19:48:52
【问题描述】:

第一次发问题,如果我做错了,我提前道歉。

我有一个寡妇表单应用程序,其中包含一个列表框,供用户进行一项或多项选择。这提供了一个 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 件事是天数、状态和位置,我需要返回超过天数、处于给定状态和任何选定位置的所有记录。

我想我已经接近了,但我错过了一些东西,我希望有人可以帮忙。

【问题讨论】:

  • 我还会在查询之前创建变量并在查询中使用它们而不是表达式 - 更清晰的查询。

标签: sql vb.net linq


【解决方案1】:

您确定以正确的方式使用您的.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")

【讨论】:

  • 成功了!非常感谢。是的,设施是一个容纳用户选择的阵列。我需要复习一下。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
相关资源
最近更新 更多