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

时间:2015-09-01 18:32:23

标签: c# sql sql-server linq linq-to-sql

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

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 个答案:

答案 0 :(得分:0)

最后,我已经弄明白了。由于在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();