Linq'where'子句返回CS1929

时间:2018-10-20 17:04:51

标签: c# linq

仍然要学习Linq的细微差别。 经过研究,但找不到解决方案,我认为这很容易解决。

编辑:按要求提供以下完整代码块:

#

// unionOrgs是组织列表 //下面的查询:我需要查询上面列表中的组织所在的更大表

//Jboyd pull back all relative orgs
var parent =
from s in Students
where s.Id==5027
select new { 
    ID_PK = s.CaseOwnerIdAspnet_Users.User_ID_FKDYN_User_Profile.Organization_ID_FKDYN_Organization.Parent_ID_FK == null ?
    (int) s.CaseOwnerIdAspnet_Users.User_ID_FKDYN_User_Profile.Organization_ID_FKDYN_Organization.ID_PK
    :
    (int) s.CaseOwnerIdAspnet_Users.User_ID_FKDYN_User_Profile.Organization_ID_FKDYN_Organization.Parent_ID_FK
    };

var orgs = 
from o in DYN_Organizations
join p in parent on o.Parent_ID_FK equals p.ID_PK
select new {ID_PK = o.ID_PK};

var unionOrgs = parent.Union(orgs) ;

错误: CS1929'IQueryable <>'不包含'Contains'的定义,最佳扩展方法重载'ParallelEnumerable.Contains(ParallelQuery,int)'需要类型为'ParallelQuery'的接收器

最终目标是unionOrgs返回组织列表。然后,我想查询更大的表以查找该列表中的任何组织

1 个答案:

答案 0 :(得分:1)

orgs不是单个实例,而是一个集合,这就是为什么它不具有ID_PK属性的原因。而是使用Contains

var orgs = from o in DYN_Organizations
           join p in parent on o.Parent_ID_FK equals p.ID_PK
           select o.ID_PK;

var query = from up in userProfilesQuery
            where orgs.Contains(up.Organization_ID_FK) 
            select up;

另请参见,当您使用单个字段投影匿名对象时,最好也投影属性并接收IQueryable<int>而不是IQueryable<AnonymousObject>

专门针对第二个查询,我发现方法语法更简洁:

var query = userProfilesQuery.Where(up => orgs.Contains(up.Organization_ID_FK));