Linq选择另一个Linq查询中的if列值
因此,我想选择在另一个linq查询中具有contact_id的所有行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
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的更高版本则不会他是前任,仅供参考。