仍然要学习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返回组织列表。然后,我想查询更大的表以查找该列表中的任何组织
答案 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));