【问题标题】:LINQ to SQL Implementation of Query Operator Error查询运算符错误的 LINQ to SQL 实现
【发布时间】:2014-12-02 19:10:28
【问题描述】:

我已经编写了一些看起来很简单的 LINQ to SQL 代码:

Dim TestAcct = (
    From s In ITS_DB.SysValues
    Where s.vTable = STR_BQSync And s.Category = STR_TestAcct And s.Comment = STR_N).ToList
' other code
Dim _ChangedAccounts = (
    From  c In FinanceDB.Customers
    join t In TestAcct On t.Value Equals c.Customer_Account.ToString
    Select c).ToList

问题是在运行时第二个抛出异常:

在查询的 LINQ to SQL 实现中不能使用本地序列 除包含运算符之外的运算符

我看过一些关于使用 contains 的讨论,但我不确定这是否适用于这种情况。异常消息中引用的本地序列是什么?

【问题讨论】:

    标签: vb.net linq


    【解决方案1】:

    从分配给TestAcct 中删除ToList。这会将其保留为查询,并允许 Linq to SQL 将第二个查询解析为更好的最终 SQL 查询。

    Dim TestAcct = (
        From s In ITS_DB.SysValues
        Where s.vTable = STR_BQSync And s.Category = STR_TestAcct 
                         And s.Comment = STR_N)
    ' other code
    Dim _ChangedAccounts = (
        From  c In FinanceDB.Customers
        join t In TestAcct On t.Value Equals c.Customer_Account.ToString
        Select c).ToList
    

    【讨论】:

      【解决方案2】:

      您应该能够仅投影第一个集合中的连接键集合,然后在第二个查询中的匹配键上使用 .Contains

      Dim TestAccts = (
          From s In ITS_DB.SysValues
          Where s.vTable = STR_BQSync And s.Category = STR_TestAcct And s.Comment = STR_N
          Select s.Value).ToList
      

      然后

      Dim _ChangedAccounts = (
          From  c In FinanceDB.Customers
          Where TestAccts.Contains(c.Customer_Account.ToString)
          Select c).ToList
      

      【讨论】:

        【解决方案3】:

        我做了更多的测试并想出了一个有趣的解决方案!

        Dim TestAcct = (
            From s In ITS_DB.SysValues
            Where s.vTable = STR_BQSync And s.Category = STR_TestAcct And s.Comment = STR_N).ToList
        ' some other code
        _ChangedAccounts = (
            From t In TestAcct
            join c In FinanceDB.Customers On t.Value Equals c.Customer_Account.ToString
            Select c).ToList
        

        第一个查询没有改变。在第二个中,我只是颠倒了我使用的表格的顺序。它工作正常!我不知道为什么,但它非常简单。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-06
          • 1970-01-01
          • 2011-04-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多