LINQ - 嵌套的 where 子句

17

我有一个项目问题。我正在尝试获取公司列表,但只筛选那些位于“斯德哥尔摩”的公司。

表结构

**Company**:
CompanyID
CompanyName
etc…

**CompanyAddressDetails** (relation table):
Company_CompanyID
CorrespondingAddress_AddressID

**CorrespondingAddress**:
AddressID
StreetName
City
etc…

现在我要做的第一件事是查询:

var companyModel = from c in db.Company select c;

如何获得包含其对应地址(可以有多个)的全部公司列表,使结果如下所示:

enter image description here

我的问题是:如何根据 CorrespondingAddress 的嵌套元素之一进行过滤?例如城市?

到目前为止,我尝试过:

companyModel = companyModel.Where(s => s.CorrespondingAddress.Where(x => x.City.Equals("Stockholm")));
companyModel = companyModel.Where(s => s.CorrespondingAddress.ToList().First().Address.Equals("Stockholm"));

但是它们都没有起作用。谢谢!

2个回答

62
companyModel = companyModel
               .Where(s => s.CorrespondingAddress
                     .Any(x => x.City.Equals("Stockholm")));

我在其他地方没有找到这个,所以感谢你指引我正确的方向。 - marijnz0r
为什么 OP 的第一次尝试中第二个 where 不起作用? - ninbit
@ninbit 因为它仅测试公司的“第一个”对应地址是否在斯德哥尔摩(您甚至不知道测试的对应地址顺序),而我们想要的是“至少一个”对应地址,而不是“第一个”。例如,如果一家公司在伦敦有一个地址,在斯德哥尔摩有另一个地址,则 OP 的查询可能不会返回该公司,而带有“任何”选项的查询将返回该公司。 - Raphaël Althaus

8
尝试使用 Any()
companyModel = companyModel.Where(s => s.CorrespondingAddress.Any(x => x.City.Equals("Stockholm"))); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接