如何使用包含类似于SQL的IN语句来查询多个子元素

时间:2014-10-14 21:44:22

标签: linq

我有一个存储库方法,可以从数据库中获取所有用户。每个用户都有一个名为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中是否有任何方法可以查询多个子元素,就像我在这里尝试一样?

1 个答案:

答案 0 :(得分:0)

尝试这种方式:

List<User> usersData = rep.GetUsersProfilesAndCompanies()
                          .Where(u => u.CompanyStructures.Any(o => targetCompanyIDs.Contains(o.ID)))
                          .ToList();