[c#]选择项目的 ID 从另一列表中的项目-在 LINQ to SQL 中不能使用本地序列

标签: sql Linq SQLServer C#
发布时间: 2017/2/26 20:02:38
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我得到这个错误而争取的项目列表后从另一个表中引用的表。相当于第三行︰

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)

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

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

不幸的是,我得到一个运行时错误︰

本地序列不在 LINQ 中除了 contains () 运算符的查询运算符的 SQL 执行时使用。

任何帮助,将不胜感谢。

解决方法 1:

最后,我发现了这一点。因为它是不可能使用 .Any() 在 LINQ 到 SQL 中,我们要而不是一个两个的 LINQ 查询。

第一次获得的有第二个查询谓词所匹配的 Id 列表︰

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

第二个查询以实际获得我们想要放在第一位的项的列表︰

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