2014-01-02 4 views
1

Вначале отправляем вопрос, поэтому заранее извиняюсь, если я сделаю неправильный шаг.Проблема с 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") 

Я думаю, что проблема находится в «И Enumerable.Range ...» части кода.

3 вещи, которые используются в качестве критериев, - это количество дней, статус и местоположение. Мне нужно вернуть все записи, которые превышают количество дней, в заданном статусе и в любом из выбранных мест.

Я думаю, что я близок, но у меня что-то не хватает, и я надеюсь, что кто-то может помочь.

+2

Я бы также сделал переменные перед запросом и использовал их в запросе, а не в выражении - более чистый запрос. – OneFineDay

ответ

0

Вы уверены, что используете в своей машине .Contains int right? Что произойдет, если вы напишете это? Я считаю, что 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") 
+0

Это сделало трюк! Огромное спасибо. Да, объекты были массивом, в котором находились пользователи. Мне нужно освежить это. Еще раз спасибо! – user3154853

Смежные вопросы