代码之家  ›  专栏  ›  技术社区  ›  Jean-François Beaulieu

按ID从另一个项目列表中选择项目-不能在LINQ to SQL中使用本地序列

  •  0
  • Jean-François Beaulieu  · 技术社区  · 10 年前

    当我试图从另一个表中引用的表中获取项目列表时,我遇到了此错误。相当于第三行:

    select ID_CLIENT from tb_client where cli_nom = 'John Doe'
    select ClientAdresseID from tb_client_adresse where clientId = 3120 -- returns items 342, 343, 344
    select * from tb_client_adresse_type where clientAdresseId IN (342, 343, 344)
    

    我使用两个lambda表达式编写了这个简单的LINQ查询:

    var clientAddresseTypes =
        DataContext.ClientAdresseTypes.Where(x => clientAdresses.Any(y => y.ClientAdresseID == x.ClientAdresseID)).ToList();
    

    不幸的是,我收到一个运行时错误:

    在查询的LINQ to SQL实现中不能使用本地序列 运算符,Contains()运算符除外

    如有任何帮助,将不胜感激。

    1 回复  |  直到 10 年前
        1
  •  0
  •   Jean-François Beaulieu    10 年前

    终于,我明白了这一点。因为无法使用 .Any() 在LINQ to SQL中,我们必须进行两次LINQ查询,而不是一次。

    第一个获取必须由第二个查询的谓词匹配的ID列表:

    IList<int> clientAddressIds = clientAdresses.Select(clientAddress => clientAddress.ClientAdresseID).ToList();
    

    第二个查询实际获得我们首先想要的项目列表:

    IList<ClientAdresseType> clientAddresseTypes = DataContext.ClientAdresseTypes.Where(clientAddressType => clientAddressIds.Contains(clientAddressType.ClientAdresseID)).ToList();