【问题标题】:LINQ - nested where clauseLINQ - 嵌套 where 子句
【发布时间】:2021-07-05 08:40:05
【问题描述】:

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

表结构

**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;

获取完整的公司列表和对应的地址(可以是多个),因此结果如下所示:

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

到目前为止我尝试过

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

但它们都不起作用。谢谢!

【问题讨论】:

    标签: c# linq entity-framework


    【解决方案1】:
    companyModel = companyModel
                   .Where(s => s.CorrespondingAddress
                         .Any(x => x.City.Equals("Stockholm")));
    

    【讨论】:

    • 我没有在其他地方找到这个,所以感谢你指出我正确的方向。
    • 为什么 OP 的第一次尝试中的第二个 where 不起作用?
    • @ninbit 因为它仅在公司的“第一个”相应地址(您甚至不知道相应地址的测试顺序)在斯德哥尔摩时进行测试。而我们要的是“至少一个”对应的地址,而不是“第一个”。例如,如果一家公司的地址在伦敦,另一家在斯德哥尔摩,则 OP 的查询可能不会返回该公司,而带有“Any”的公司会。
    【解决方案2】:

    尝试任何()

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      相关资源
      最近更新 更多