2014-11-26 6 views
0

У меня есть данные, которые имеют только один столбец и список значений. Я хотел бы создать оператор LINQ, чтобы исключить некоторые значения из этого datatable. И затем используйте результат в виде таблицы поиска, чтобы извлекать данные из других доступных данных. Вот мои коды.LINQ не равно не работает

Dim cs1DT = From row In dt1 
    Where row.Field(Of String)(0) <> "BS2" Or row.Field(Of String)(0) <> "BS3" 
    Select row 
    Order By row Ascending 

    For Each s As String In cs1DT.ToString 
     Dim dt = From row In dt2.AsEnumerable 
       Where row.Field(Of String)("Q_id").Contains(s) 
       Select row 
     If dt.Count > 0 Then ListDT.Add(dt.CopyToDataTable) 
    Next 

Не работает. Выход включает в себя оба значения BS2 и BS3. Это еще хуже. Он пропускает мои первые два списка значений, которые находятся в начале dat2 dat2. Я не могу понять, что не так. Значения в dt1 соответствуют первым 3 символам в dt2. Не могли бы вы помочь? Спасибо.

+6

Вы используете логический оператор 'Or'. Вам нужно «И». –

ответ

1

Попробуйте использовать And логический оператор, для образца:

Dim cs1DT = (From row In dt1 
Where row.Field(Of String)(0) <> "BS2" And row.Field(Of String)(0) <> "BS3" 
Order By row Ascending 
Select row.Field(Of String)(0)).ToList() 

For Each s As String In cs1DT 
    Dim dt = From row In dt2.AsEnumerable 
      Where row.Field(Of String)("Q_id").Contains(s) 
      Select row 
    If dt.Count > 0 Then ListDT.Add(dt.CopyToDataTable) 
Next 
+0

Спасибо. Я изменил или на AndAlso, но получил некоторые неожиданные результаты. Позвольте мне попробовать отладить LINQ в visual studio (я новичок в этом), и я дам вам знать, что я получу. – user3754205

+0

Странно. Когда я использую Debug -> windows -> Immediate, я получил некоторые значения от Axx -> Azz и останавливается даже до группы BS1. Он предполагает показать группу BS1. И эти значения после BS3 не отображались (?). Когда я запускаю его, он показывает BS1, BS2 и BS3, а остальные, но он не показывает первые две группы Axx и Azz. Я запутался. Не могли бы вы показать мне почему? – user3754205

+0

Извините, я добавил неверный Debug.Print другого типа данных. Но после его исправления он все еще показывает группы BS2 и BS3. Интересно, почему LINQ не может вытащить правильные данные. Кроме того, «lookup» dt1 имеет 3 символьных значения, таких как BS1, но dt2 имеет полный BS100. Это не проблема с функцией Содержит, правильно? – user3754205

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