我有一个存储库方法,可以从数据库中获取所有用户。每个用户都有一个名为Profile的子对象和一个或多个子对象,这些对象属于名为Companies的List。此存储库方法已经过测试,工作正常并返回IQueryable类型,我将其用作基础,以便稍后在触发查询时缩小结果范围。
我要做的是从该存储库方法获取一个用户列表,其中至少有一个关联公司的ID与现有列表中名为“targetCompanyIDs”的元素相匹配。该列表的类型为List< int>公司的ID也是一个int。以下是我尝试生成该用户列表:
List<User> usersData = rep.GetUsersProfilesAndCompanies().Where(u => targetCompanyIDs.Contains(u.CompanyStructures.ID)).ToList();
我得到的错误是List类型不包含ID的定义。有道理,对吗?所以我试图将用户的关联公司视为某种类型的组或聚合。这是我的第二次尝试:
List<User> usersData = rep.GetUsersProfilesAndCompanies().Where(u => targetCompanyIDs.Contains(u.CompanyStructures.Any(cs => cs.ID))).ToList();
我想说的是,对于用户与之关联的公司,该公司的ID是否与列表targetCompanyID匹配?如果是,请在列表中包含用户。不幸的是,这会产生“无效参数”错误。
在LINQ中是否有任何方法可以查询多个子元素,就像我在这里尝试一样?
答案 0 :(得分:0)
尝试这种方式:
List<User> usersData = rep.GetUsersProfilesAndCompanies()
.Where(u => u.CompanyStructures.Any(o => targetCompanyIDs.Contains(o.ID)))
.ToList();