Select 项目按 ID 来自另一个项目列表 - 本地序列不能在 LINQ to SQL 中使用

Select items by ID from another list of items - Local sequence cannot be used in LINQ to SQL

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

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();

不幸的是,我收到 运行 次错误:

Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator

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

我终于明白了。由于不可能在 LINQ-to-SQL 中使用 .Any(),我们必须进行两个 LINQ 查询而不是一个。

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

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

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

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