【问题标题】:LINQ not equal doesn't workLINQ 不等于不起作用
【发布时间】:2014-11-26 17:19:58
【问题描述】:

我有一个只有一列和一个值列表的数据表。我想创建一个 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。情况更糟。它跳过了我在数据表 dt2 开头的前两个值列表。我不知道出了什么问题。 dt1 中的值与 dt2 中的前 3 个字符匹配。你能帮忙吗?谢谢你。

【问题讨论】:

  • 您正在使用Or 逻辑运算符。你需要一个And

标签: vb.net linq


【解决方案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

【讨论】:

  • 谢谢。我已将 Or 更改为 AndAlso,但得到了一些意想不到的结果。让我尝试在 Visual Studio 中调试 LINQ(我是新手),我会告诉你我得到了什么。
  • 这很奇怪。当我使用 Debug -> windows -> Immediate 时,我从 Axx -> Azz 获得了一些值,它甚至在 BS1 组之前就停止了。它应该显示 BS1 组。 BS3 之后的那些值没有出现(?)。当我运行它时,它显示 BS1、BS2 和 BS3 以及其余部分,但它没有显示前两组 Axx 和 Azz。我很困惑。你能告诉我为什么吗?
  • 对不起,我添加了一个错误的 Debug.Print 不同的数据表。但修复后,它仍然显示那些BS2和BS3组。我想知道为什么 LINQ 不能提取正确的数据。此外,“查找”dt1 像 BS1 一样具有 3 个字符值,但 dt2 具有完整的 BS100。 Contains 函数应该没有问题吧?
  • 我做了一些改变。我不确定您要做什么,但是当您尝试在字符串中使用foreach 时,您会在chars 之间循环。在这种情况下,我更改为在第一个查询中选择列,在第二个查询中选择结果。
  • 我修改了代码并将 AndAlso 替换为 And,但仍然不起作用。它不断拉出BS2和BS3。它跳过了前两组 AM 和 AP。我想要做的是我想从第一个表(它只有一列)中提取除 BS2 和 BS3 之外的所有数据,并将结果用作查找表与第二个表进行比较并从与 tbl 查找匹配数据的第二个表
猜你喜欢
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 2016-12-10
  • 2014-10-21
相关资源
最近更新 更多