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();
我在尝试从另一个 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();