Linq选择另一个Linq查询中的if列值

Linq选择另一个Linq查询中的if列值,linq,Linq,因此,我想选择在另一个linq查询中具有contact_id的所有行 var test1 = this.DB.Links.Where(l => l.INSTANCE_ID == this.InstanceId); var test2 = this.DB.Links.Select (l => test1.Contains(l.CONTACT_ID))); 正确的语法是什么 编辑:首先尝试使用ToList()将其具体化,得到以下错误:参数1:无法从long转换?到匿名类型长?联系人ID

因此,我想选择在另一个linq查询中具有contact_id的所有行

var test1 = this.DB.Links.Where(l => l.INSTANCE_ID == this.InstanceId);
var test2 = this.DB.Links.Select (l => test1.Contains(l.CONTACT_ID)));
正确的语法是什么


编辑:首先尝试使用
ToList()
将其具体化,得到以下错误:
参数1:无法从long转换?到匿名类型长?联系人ID

我认为您需要使用
选择
列表
在第一次查询中具体化
联系人ID
的集合。另外,第二个查询需要使用
Where
而不是
Select

var test1 = this.DB.Links
    .Where(l => l.INSTANCE_ID == this.InstanceId)
    .Select(l => l.CONTACT_ID)
    .ToList();
var test2 = this.DB.Links.Where(l => test1.Contains(l.CONTACT_ID)));

您使用的是LINQtoSQL还是LINQtoEntities?还有什么不适合您呢?Linq到SQL。它说类型参数不能从“Contains”上的用法中输入。您能添加一些关于数据类型和预期结果的详细信息吗?哦,没关系,这是程序另一部分的错误,很抱歉。因为它是
ID
(因此可能类似于
int
string
,也许
HashSet
更合适。@CommuSoft您是在谈论
ToList
?这并不重要,因为整个集合需要迭代并注入SQL字符串。无论您是使用
HashSet
还是
列表
>或者任何无关紧要的东西。插入哈希集的时间复杂度实际上大致相同(O(n logn)),但是您必须为
this.DB.Links
此集合中的每个项进行查询。给定集合的长度为n,并且
test1
的结果有k个元素,使用
.ToList
方法的时间复杂度为O(n+k log k+n k),而对于
HashSet
我们期望恒定的时间查找,从而导致O(n+k对数k+n)=O(n+k对数k)@CommuSoft该查询并不是针对
列表
进行的。该列表的元素被提取并插入到SQL字符串中,然后由SQL server进行计算。此时,SQL字符串中
in
子句中的值是否来自列表、哈希集或其他任何内容都无关紧要没有性能差异。@AsadSaeeduddin如果不执行ToList,某些LINQ提供程序的性能会更好。它将尝试从两者创建一个查询,并执行一次,而不是两个独立的查询。没有它,某些LINQ提供程序将出错。我相信LINQ to SQL是更晚的类型,而LINQ over EF的更高版本则不会他是前任,仅供参考。